Hive面试题
程序员文章站
2022-06-10 10:43:16
...
1、什么是Hive
是一个基于hadoop的数据仓库工具,可以将结构化数据映射成一张数据表,并提供类SQL的查询功能
2、Hive的意义(最初研发的原因)
背景:hadoop是个好东西,但是学习难度大,成本高,坡度陡。 意义(目的):降低程序员使用hadoop的难度。降低学习成本。
3、Hive的内部组成模块,作用分别是什么
用户接口:包括CLI、JDBC/ODBC、WebGUI。其中,CLI(command line interface)为shell命令行;JDBC/ODBC是Hive的JAVA实现,与传统数据库JDBC类似;WebGUI是通过浏览器访问Hive。
元数据存储:通常是存储在关系数据库如mysql/derby中。Hive 将元数据存储在数据库中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
解释器、编译器、优化器、执行器:完成HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS 中,并在随后有MapReduce 调用执行。
4、Hive支持的数据格式
可支持Text, SequenceFile,
ParquetFile, ORC格式
RCFILE等
5、进入Hiveshell窗口的方式
第一种交互方式:Hive交互shell(直接通过bin/hive的方式)
第二种交互方式:Hive JDBC服务
1.启动hiveserver2服务
前台:bin/hive --service hiveserver2
后台:nohup bin/hive --service hiveserver2 &
2.beeline连接hiveserver2
bin/beeline
beeline> !connect jdbc:hive2://node01.hadoop.com:10000
第三种交互方式:Hive命令 就是 bin/hive 加上一些参数 e:bin/hive -e "use myhive;select * from test1;"
6、Hive数据库、表在HDFS上存储的路径是什么
hive的表存放位置模式是由hive-site.xml当中的一个属性指定的
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
7、like与rlike的区别
like不是正则,而是通配符。这个通配符可以看一下SQL的标准,例如%代表任意多个字符。
rlike是正则,正则的写法与java一样。'\'需要使用'\\',例如'\w'需要使用'\\w'
8、内部表与外部表的区别
内部表数据由Hive自身管理,外部表数据由HDFS管理;
删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;
9、分区表的优点是,分区字段的要求是
要求:分区字段绝对不能出现在数据表以有的字段中。
优点: 将数据按区域划分开,查询时不用扫描无关的数据,加快查询速度
10、分桶表的优点是,分桶字段的要求是
优点: 1、对于join的需求,能够起到优化加速的作用。(前提是,join字段设置为分桶字段) 2、用于数据取样(获取/提取数据样本
要求:分桶字段必须是表中的字段
11、数据导入表的方式
五种方式:
1、直接向分区表中插入数据
insert into table score3 partition(month ='201807') values ('001','002','100');
2、通过查询插入数据
(linux ) load data local inpath '/export/servers/hivedatas/score.csv' overwrite into table score partition(month='201806');
(HDFS) load data inpath '/export/servers/hivedatas/score.csv' overwrite into table score partition(month='201806');
3、多插入模式
from score
insert overwrite table score_first partition(month='201806') select s_id,c_id
insert overwrite table score_second partition(month = '201806') select c_id,s_score;
4、查询语句中创建表并加载数据(as select)
create table score5 as select * from score;
5、创建表时通过location指定加载数据路径
create external table score6 (s_id string,c_id string,s_score int) row format delimited fields terminated by '\t' location '/myscore6';
12、数据导出表的方式
7中方法
1、将查询的结果导出到本地
insert overwrite local directory '/export/servers/exporthive/a' select * from score;
2、将查询的结果格式化导出到本地
insert overwrite local directory '/export/servers/exporthive' row format delimited fields terminated by '\t' collection items terminated by '#' select * from student;
3、将查询的结果导出到HDFS上(没有local)
insert overwrite directory '/export/servers/exporthive' row format delimited fields terminated by '\t' collection items terminated by '#' select * from score;
4、Hadoop命令导出到本地
dfs -get /export/servers/exporthive/000000_0 /export/servers/exporthive/local.txt;
5 、 hive shell 命令导出
bin/hive -e "select * from yhive.score;" > /export/servers/exporthive/score.txt
6、export导出到HDFS上(全表导出)
export table score to '/export/exporthive/score';
7.sqoop导出
13、order by与sort by的区别
使用order by会引发全局排序
使用sort by会引发局部排序
14、where 与having的区别
“Where”是一个约束声明,在查询数据库的结果返回之前对数据库中的查询条件进行约束,即在结果返回之前起作用,且where后面不能使用“聚合函数”;
“Having”是一个过滤声明,所谓过滤是在查询数据库的结果返回之后进行过滤,即在结果返回之后起作用,并且having后面可以使用“聚合函数”。
15、distribute by何时使用,通常与哪个联合使用
distribute by是控制在map端如何拆分数据给reduce端的,通常与sort by进行连用
16、Cluster by何时使用
当 distribute by和sort by的是同一个字段时使用Cluster by
17、distribute by+sort by(相同字段) 与Cluster by的区别
排序只能是倒序排序,不能指定排序规则为ASC或者DESC。
18、hive -e/-f/-hiveconf分别是什么意思
-e从命令行执行指定的HQL
-f 执行HQL脚本
-hiveconf 设置hive运行时候的参数配置
19、hive声明参数有哪些方式,优先级是什么
配置文件<命令行参数<参数声明
20、编写hiveUDF代码,方法名称叫什么
evaluate
21、企业中hive常用的数据存储格式是什么?常用的数据压缩格式是什么?
存储格式是ORC格式,数据压缩格式是snappy
22、hive自定义函数的类型
自定义函数分为三个类别:
UDF(User Defined Function):一进一出
UDAF(User Defined Aggregation Function):聚集函数,多进一出(例如count/max/min)
UDTF(User Defined Table Generating Function):一进多出,如lateral view explode()