Hive 3. 命令行界面

时间:2022-04-04 22:13:12

命令行界面

命令行界面(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 命令来查看或修改变量值。

  • 查看属性

    1. 查看单个变量值:
      SET env:HOME

    上面的命令查看的是一个 Shell 环境变量(env开头),用户主目录。

    1. 查看由 Hive 设置的属性,四个命名空间中的值:

      SET
    2. 查看系统中所有的属性:

      SET -v
  • 设置变量

    1. 使用选项设置变量:

      $ hive --define first=hello
      hive> set first;
      foo=bar
      hive> set hivevar:first
      hivevar:first=hello
    2. 使用 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 的文件,并执行其中的命令,可以在其中放置经常执行的命令,会让操作更加方便。

更多


  1. tab 命令自动补全。
  2. 执行简单 shell 命令,在 hive CLI 中 !开头。

注意这种方式不能使用需要用户进行输入的交互式命令,而且不支持 shell 的“管道” 功能和文件名自动补全功能。
  • 可以直接执行 dfs 命令,不用加hadoop, 且效率比 hadoop 运行方式块。

  • 注释为 “–”

  • 显示字段名称:

  • hive> set hive.cli.print.header=true;

    End!! 感谢阅读