05-Hive数据操作
写在前面的话:
该系列博文是我学习《 Hive源码解析与开发实战》视频课程的一个笔记,或者说总结,暂时没有对视频中的操作去做验证,只是纯粹的学习记录。
有兴趣看该视频的博友可以留言,我会共享出来,相互交流学习 ^.^。
*********************************************************************************************************
1、Hive执行命令方式:
cli命令行的方式、jdbc的方式(就是通过java等代码执行命令)、hwi(web浏览的方式)、beeline(类似cli的方式,但底层走的是jdbc,是在客户端用shell来执行jdbc而不是代码,在使用这种方式之前也需要开启hiveserver这种服务,同时beeline允许不是在集群结点上就可以访问远程结点上的数据)。
1.1、cli 方式:
如果在使用前不知道这个命令如何使用,可以通过hive -help 和hive --help来进行查询。hive 后面接help是用来查询hive这个命令后面可以接那些参数也就是hive的用法。hive --help用来查询hive后面接-- 再接哪些参数。
1、linux命令行中输入hive --service -help:
可以查询该命令的使用方法,后面可以接如下的参数:
比如:hive --service rcfilecat + rcfile文件路径。
2、输入hive -e “hql”:
这种方式不用进入hive客户端。最常见用法是写到shell脚本里面去,在里面可以设置shell参数变量。
3、输入hive -f filename:
把sql语句写入到文件中,从文件里面读取执行sql语句。
4、hive -i filename :
初始化hive,比如需要加载一些自定义的jar包。
5、hive -S +一些命令参数:
加-S表示在执行一些命令的时候,有一些不重要的信息不用打印出来。注意是大写S。
实验:
结果显示:
对比hive终端查询操作的结果,发现查询结果和上面执行方式查询的结果一致:
但是前面的结果显示了很多和sql查询结果无关的信息在开头,我们如果想尽量少的显示前面那些信息,主要显示查询操作的信息,那么可以在该命令中加大写的S:
另外和其它shell命令一样我们可以通过重定向把结果输出到一些文件里面:
上面的结果为:
然后在加上-V,看看结果如何:
结果为:
由上面可以看出,最终结果把执行的sql语句打印出来了。
当不把结果打印到文件中时,也会把执行的sql语句打印出来:
然后再使用加-f参数来执行sql文件的情况:
文件内容为:
执行结果为:
再比如说输入下面的查询某个字段的命令,注意这个时候会执行mapreduce程序:
结果为:
另外-i参数,和-f类似,只不过它是通过执行文件里面的sql语句来加载一些自定义jar包从而初始化hive。
以后比较常用的是用shell脚本来执行hive命令,接下来演示使用shell脚本来执行hive命令:
shell脚本内容:
然后执行脚本:
最终执行的结果为:
在脚本中可以定义一些shell变量,然后在查询语句中去引用该变量,这样灵活性比较高:
或者修改脚本把查询结果插入到某个表里去:
最后演示下list和source命令,这两个命令是在hive对话框也就是hive终端使用的命令:
这里罗列了list的用法,该命令可以用来显示缓存中加载的jar包等,比如之前用add加载进来的自定义jar,就可以用list jar 来显示罗列:
source命令是在hive对话框中去执行sql文件,和hive -f 类似,区别是source是在hive对话框中个,hive -f 是在linux 的shell中执行:
也可以通过source执行一些包含初始化hive的命令文件,从而使在当前hive对话框中生效。
注意:上面的执行hive命令的脚本必须放到集群的结点上去执行,这样才可以访问到hive数据。
1.2、Hive变量:
首先我们在hive对话框中可以通过set val=''的方式设置变量val的值,然后通过set val;的方式来显示该变量的值:
然后我们在查询语句中通过${hiveconf:val}去使用它:
然后查询结果显示:
对比原始表中的数据:
然后再演示下env的使用,这个命令可以显示当前的环境变量值:
总结记忆:
1、可以通过hive -help查询一些hive后面接的一些参数;
2、通过hive --help命令查询hive后面接--参数的用法和意思;
下面这些参数命令是通过hive -help查询出来的:
3、hive -e "hql" 用来在linux终端中执行hql语句;
3、hive -f filename 用来执行sql文件;
4、hive -i filename 通过一个文件中的hive命令,初始化hvie
5、hive -S +一些命令 可以将一些不重要的信息不打印出来,注意这里是大写的S;
6、hive -e -v +查询语句 加-v可以把sql语句也打印出来
另外可以把这些结果重定向到文件中。
还可以写shell脚本文件,在里面写hive 命令,然后执行脚本就可以执行里面的hive命令了。
7、在hive终端可以使用list命令来列出分布式缓存中的jar包等,比如当add jar /../test.jar
之后,可以通过list jar;来罗列出缓存里面有那些jar包;
8、source命令:这个是在hive终端中执行sql文件的命令,类似在shell终端中的hive -f filename;
9、在hive终端中可以通过set来设置和显示变量的值,并且通过${hiveconfig:val}来引用该变量,比如:
hive>set val=wer;
hive>set val;
hive>select * from testext where name='${hiveconfig:val}';