主页 > 新闻资讯 > 大数据学习:Hive的JDBC跨库查询

大数据学习:Hive的JDBC跨库查询

作者:张老师 浏览次数: 2021-03-16 17:37
在Hadoop生态圈当中,Hive在数据查询上是提供了足够的支持的,针对大规模的数据查询任务场景,Hive也能高效率地完成任务。今天的大数据学习分享,我们主要聚焦Hive的查询操作,来讲讲Hive的JDBC跨库查询。

Hive跨库操作,主要是通过JDBC Storage Hanlder 进行跨库查询,不仅将跨库查询操作缩减至一条查询语句中,同时还统一了数据的权限管控。基本上,除了不支持往这个JDBC外部表写数据外,其他的例如跨库联合查询,跨库ETL,数据同步等场景都是支持的。

大数据学习:Hive的JDBC跨库查询

Hive外部表声明

声明包含了两种模式,一种是以SQL查询作为外部表,还有一种是直接映射表,两种方式均创会在Hive上建一个虚表,物理数据不会存放或导入到HDFS上。

需要注意的是,采用自定义SQL的方式创建的外部表,外部表字段的数量必须和查询结果集的字段数量一致。

同时,外部表允许字段名和实际外部表/结果集的字段名不一致,也允许数据类型不一致。当出现数据类型不一致时,Hive会尝试对外部表的结果集进行类型转换,如果无法转换则会输出Null替代。当前支持的数据类型如下Byte,Short,Int,Long,Float,Double,Decimal,String,Char,Varchar,Date,Timestamp。

Hive计算下推优化器

当外部表在声明时采用的是hive.sql.table方式时,Hive会尽可能地将有关的计算下推至外部表所在的数据库系统中。

在优化前,实际上查询是把JDBC数据源当作了一个静态的取数服务。因此执行了三次Scan把数据提到Hive中,然后进行下一步的处理。得益于Apache Calcite的代数神教功能(CBO),因此可以通过后台改写SQL对JDBC数据源进行智能的计算下推。

当前可下推至外部数据库系统的SQL计算支持filter,transform,join,union,aggregation和sort.当然,如果这个下推的查询特别复杂的话,即下推的查询除了包含filter和transform,还有union,aggregation,sort和Join时,为了避免复杂查询在外部库中被执行多次,Hive会忽略hive.sql.numPartitions的配置并强制采用单线程完成外部表结果集的提取。

Hive并发查询

当声明了外部表之后,可以设置并发大小以及分区字段,可以加快结果集数据读取的速度。当配置了并发数后,Hive会将下推的查询拆成多个JDBC连接,每个拆分的连接只负责提取一部分结果集。

这样会生成3个Split,分别是:

Partition 1:where num<4 or num is null

Partition 2:where num>=4 and num<=7

Partition 3:where num>=7

如果没有指定lowerBound和UpperBound的情况下,Hive会先执行一次查询获得该字段的min,max,然后再根据partition数量动态的生成查询。

需要注意的是,如果没有指定分区字段,却指定了分区数,则Hive会依赖数据库的offset功能来完成分区查询,在实际使用中不太稳定,因此强烈推荐先指定分区字段再指定分区方案。

关于大数据学习,Hive的JDBC跨库查询,以上就为大家做了基本的介绍了。Hive针对大数据场景下的查询任务,跨库查询也是常常会遇到的场景之一,需要大家多去理解和练习掌握。成都加米谷大数据,专业大数据培训机构,大数据开发,数据分析与挖掘,零基础就业班本月正在招生中,课程大纲及学习视频可联系客服获取!
热点排行
推荐文章
立即申请>>