前言
视图是从一个或多个表导出的虚拟的表,区分权限是其重要作用之一。举个例子,在班级里,班主任需要掌握全班同学各科成绩,获悉整体状态以便全面指导,而数学老师只需要知道同学们的数学成绩。
数据库中我们常听到视图的说法。其实,大数据多源查询分析引擎openLooKeng也是有视图的概念,下面会以Hive Connector对存在的几种视图进行讲解。
VDM连接器
这个是openLooKeng新开发的一个连接器,主要可使用场景如:在一些场景中,需要在同一个会话或视图中管理或访问多个数据源,同时,用户不需要关心数据的分布和来源。
虚拟数据市场(VDM)连接器旨在将该特性引入openLooKeng。
VDM连接器支持:
· 创建、更新和删除组合多个目录的视图
· 通过视图访问真实数据
· 通过视图管理用户权限
· 记录每个用户使用VDM视图的情况
具体的配置可以参考官网:
https://openlookeng.io/zh-cn/docs/docs/connector/vdm.html
根据官网的指导我们知道VDM连接器的后端存储可以支持HDFS和关系型数据库,这里采用的是mysql进行存储。
以上是基于hive connector中的一张student表创建了一个视图存储在vdm中。
View in Hive
除了上面的提到的VDM连接器外,openLooKeng视图也可以存储在Hive connector中,我们可以按照官网的指导:
https://openlookeng.io/zh-cn/docs/docs/connector/hive.html
配置好hive connector,这样我们可以参考上面的例子进行视图的创建和查询。
以上是基于hive connector创建的openLooKeng视图然后存储在hive connector中。
Hive View
所谓的Hive view其实就是在hive 中创建的视图,openLooKeng也支持访问hive 中创建的视图,如下我们在hive中创建一个视图然后在openLooKeng中访问:
先在beeline中创建一个hive view
然后我们在openLooKeng侧对这个视图进行查询,可以看到查询结果和hive中的一致的。
原理解析
这里主要介绍视图的创建和查询流程,如下图示为视图的创建流程:
当openLooKeng接收到创建视图请求时,会调用DataDefinitionExecution进行处理,然后再调用对应MetaDataManager处理,如果是Hive 连接器则会调用HiveMetadata处理,VDM连接器则会调用VdmMetadata处理,将view中相关的sql语句编码成viewData,最后存储在connector中。
以下是视图的查询流程:
这个跟视图创建流程不太一样,当一个请求到达服务端时,由SqlQueryExectuion进行处理做语法解析,在做visitTable时,先通过MetadataManager通过对应连接器的metadata获取视图,hive 连接器则为HiveMetadata, VDM则为VdmMetadata,获取实际的table,如果获取的table为视图,则递归再进行StatementAnalyzer#paserView和#analyzeView进行视图的解析,直到解析出最终的物理表为止。在HiveMetadata#getView时,如果是Hive View则由HiveMetadata转成openLooKeng的view,再交给StatementAnalyzer做语法解析,这样处理流程就像openLooKeng的view一样处理了。
以上就是openLooKeng中视图的创建和查询流程。
# openLooKeng, Make Big Data Simplified
openLooKeng是一款开源的高性能大数据多源分析引擎,提供统一的SQL接口,具备跨数据源/数据中心分析能力,为大数据用户提供极简的数据分析体验。如果您有任何想要交流的,欢迎在社区代码仓内提Issue;也欢迎加小助手微信,进入专属技术交流群。
社区官网 https://openlookeng.io
**代码仓地址 **https://gitee.com/openlookeng
社区公众号 openLooKeng
社群小助手微信 openLooKengoss
{{m.name}}
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/201612.html