在hive中默认是不显示数据库的名称和数据表的字段名称的,这样我们在hive进行查询的时候就会发现不是很方便。默认hive的客户端执行方式如下:
[root@node3 ~]# sudo -u hive hive
Logging initialized using configuration in jar:file:/opt/cloudera/parcels/CDH-5.15.2-1.cdh5.15.2.p0.3/jars/hive-common-1.1.0-cdh5.15.2.jar!/hive-log4j.properties
WARNING: Hive CLI is deprecated and migration to Beeline is recommended.
hive> show databases;
OK
default
test
Time taken: 1.219 seconds, Fetched: 2 row(s)
hive> show tables;
OK
emp
Time taken: 0.085 seconds, Fetched: 8 row(s)
hive> select * from emp;
OK
7369 SMITH CLERK 7902 1980-12-17 800.0 NULL 20
7499 ALLEN SALESMAN 7698 1981-2-20 1600.0 300.0 30
......
7934 MILLER CLERK 7782 1982-1-23 1300.0 NULL 10
Time taken: 0.768 seconds, Fetched: 14 row(s)
hive>
如何才能让客户端显示我们想知道的数据库和字段信息呢?
1.显示数据库信息
临时方式是在hive客户端设置参数:hive.cli.print.current.db为true
hive> set hive.cli.print.current.db;
hive.cli.print.current.db=false
hive> set hive.cli.print.current.db=true;
hive (default)> use test;
OK
Time taken: 0.101 seconds
hive (test)>
可以看出当前的数据库已经显示在hive提示符的后面。切换数据库后会显示新的数据库在后面。
2.显示数据表字段
hive默认是不显示数据表的字段的,通过设置参数:hive.cli.print.header为true就可以显示字段名称。
hive (test)> select * from emp;
OK
7369 SMITH CLERK 7902 1980-12-17 800.0 NULL 20
......
7934 MILLER CLERK 7782 1982-1-23 1300.0 NULL 10
Time taken: 0.185 seconds, Fetched: 14 row(s)
hive (test)> set hive.cli.print.header=true;
hive (test)> select * from emp;
OK
emp.empno emp.ename emp.job emp.mgr emp.hiredate emp.sal emp.comemp.deptno
7369 SMITH CLERK 7902 1980-12-17 800.0 NULL 20
......
7934 MILLER CLERK 7782 1982-1-23 1300.0 NULL 10
Time taken: 0.102 seconds, Fetched: 14 row(s)
可以看出字段名称都显示在查询结果的第一行了。但是我们发现,表名称也显示出来了,这是为了防止字段名出现重复的,所以在字段名前面加上了表名。
3.去除表名
表名显示在字段名称前面有时候感觉有点多余,这个表名是可以不显示的,设置参数hive.resultset.use.unique.column.names为false就可以不显示表名。
hive (test)> set hive.resultset.use.unique.column.names=false;
hive (test)> select * from emp;
OK
empno ename job mgr hiredate sal comm deptno
7369 SMITH CLERK 7902 1980-12-17 800.0 NULL 20
......
7934 MILLER CLERK 7782 1982-1-23 1300.0 NULL 10
Time taken: 0.08 seconds, Fetched: 14 row(s)
可以看出字段名称前面的表名已经没有了。
4.永久生效
前面三步的设置都是在当前客户端临时生效的,如果退出客户端,那么又会回到之前的设置,如何将这些设置永久生效呢?就需要修改hive-site.xml配置文件。在该文件中加入如下三个配置内容:
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
<property>
<name>hive.resultset.use.unique.column.names</name>
<value>false</value>
</property>
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
需要修改的是hive客户端所在的服务器上的hive-site.xml客户端,修改完后重新启动hive客户端,就可以看到参数已经生效了,下次重新启动客户端后该配置还是有效的。