命令行界面
命令行界面(CLI)是和 Hive 交互最常见的方式。
变量和属性
变量或者属性是在不同的上下文中使用的属于,基本上他们功能是相同的。
Hive 中的变量和属性一共有四个命名空间:
命名空间 | 使用权限 | 解释 |
---|---|---|
hivevar | 可读/可写 | 用户自定义的变量 (0.8.0之后) |
hiveconf | 可读/可写 | Hive 相关的配置文件 |
system | 可读/可写 | Java 定义的配置属性 |
env | 只可读 | Shell 环境定义的变量 |
//
比如下面两个 Hive 选项(注意,是选项,不是命令):
--define key=value
--hivervar key=value
就是把键值对放到 hivevar 命名空间中,以个其他三种命名空间区分。
hivevar 命名空间内部是以 Java 字符串的方式存储的。用户可以在查询语句中直接引用变量。 Hive 会先将变量的key替换为value后,才把语句提交给查询处理器。
在 CLI 中,使用 SET 命令来查看或修改变量值。
-
查看属性
- 查看单个变量值:
SET env:HOME
上面的命令查看的是一个 Shell 环境变量(env开头),用户主目录。
-
查看由 Hive 设置的属性,四个命名空间中的值:
SET
-
查看系统中所有的属性:
SET -v
- 查看单个变量值:
-
设置变量
-
使用选项设置变量:
$ hive --define first=hello
hive> set first;
foo=bar
hive> set hivevar:first
hivevar:first=hello -
使用 hive 命令行设置变量:
hive> set hivevar:first=hello_again
set first
hello_again
hive> set hivevar:first
hivevar:first=hello_again
我们可以发现,hivevar前缀是可选的。
-
-
使用变量
hive> create table test_var_use(i int, ${hivevar:first} string);
hive> describe test_var_use;
i int
hello_again strng
hive> create table test_var_use(i int, ${first} string);
hive> describe test_var_use;
i int
hello_again strng
下面看看 -hiveconf选项(两个横杠也可以),使用该选项可以单独设置当前会话的中属性,他设置的是 hiveconf 命名空间,例如:
$ hive -hiveconf fs.defaultFS-hdfs://localhost \
-hiveconf mapreduce.framework.name=yarn \
-hiveconf hive.cli.print.current.db=true;
最后一个属性有些用,他设置在 hive 提示符后添加当前所在的数据库的名字。
也可以使用 -conf 选项指定有配置文件的一个目录,用来覆盖默认的配置目录
hive --config /users/henvealf/hive-conf
注意:
hive 中配置的覆盖顺序,小数覆盖大数:
1. Hive 的 SET 命令 。
2. Hive 命令行选项 -hiveconf。
3. hive-site.xml 与 Hadoop 中的 site 配置文件。
4. Hive 和Hadoop 的默认配置属性。
最后我们有必要了解一下 system 命名空间,Java的System属性对这个命名空间内容具有可读可写的权利;而 env 命名空间,因为牵扯到的是 Linux 的环境变量,只提供可读权限。
而且操作这两个属性的时候,必须要使用 system: 与 env: 前缀来指定。
Hive 中“一次使用”命令
用户有时候希望执行完一个或者多个语句(;分隔,放在“”中,能在hive命令中执行的,这里都可以执行)后,执行结束直接退出,就使用 -e 选项,如下:
$ hive -e "select * from test_var_use limit 3";
应急情况下可以利用 “>” ,将查出的内容保存在一个文件中,通道啊,通道,重定向神马的。 -S 去掉查询日志(OK,Time taken)。
hive -S -e "select * from test_var_use" > /tmp/shit.table
执行文件中里写的Hive查询
- -f :hive命令选项
- source :CLI 命令中使用
$ cat /user/what.sql
select * from test_var_use limit 3
$ hive -f /user/what.sql
$ hive
hive> source /user/what.sql;
hiverc 文件
hive -i asd.hiverc
执行上面的语句后,hive 会自动到 HOME 目录中寻找名为 asd.hiverc 的文件,并执行其中的命令,可以在其中放置经常执行的命令,会让操作更加方便。
更多
- tab 命令自动补全。
- 执行简单 shell 命令,在 hive CLI 中 !开头。
注意这种方式不能使用需要用户进行输入的交互式命令,而且不支持 shell 的“管道” 功能和文件名自动补全功能。可以直接执行 dfs 命令,不用加hadoop, 且效率比 hadoop 运行方式块。
注释为 “–”
显示字段名称:
hive> set hive.cli.print.header=true;
End!! 感谢阅读