create table student(id int,name string);
insert into table student values(1,"zhangsan");
select * from student;
hive --define foo=bar
或者
hive -d foo=bar
或者
hive --hivevar foo=bar
–defifine key=value和–hivevar key=value是等价的。⼆者都是让⽤户在命令⾏定义⾃定义变量以便在Hive脚本中使⽤。
当⽤户使⽤这个功能时,hive会将这些键值对放到hivevar命名空间,以便和其他3种内置命名空间(hiveconf、system、env)进⾏区分。
verbose模式会在命令⾏窗⼝中显示要执⾏的sql语句
hive --verbose
hive -e "select id from student;"
(1)在$HIVE_HOME/
下创建datas目录并在datas目录下创建hivef.sql文件
(2)文件中写入正确的hql语句
select * from student;
(3)执行文件中的hql语句
hive -f $HIVE_HOME/datas/hivef.sql
(4)执行文件中的hql语句并将结果写入文件中
hive -f $HIVE_HOME/datas/hivef.sql > $HIVE_HOME/datas/hive_result.txt
hive -i init.hql
进⼊到当前⽤户的根⽬录 /root 或/home/hive
查看. hivehistory ⽂件
hive (default)> quit;
hive (default)> exit;
dfs -ls /;
在Hive脚本中⽤户可以使⽤发–开头的字符串来表示注释,例如:
⽤户不需要退出Hive CLI就可以执⾏简单的bash shell命令。只要在命令前加上!并且以分号(;)结尾就可以。
在可视化工具中不能执行。
Hive变量是以Java字符串的形式存储的,⽤户可以在查询中引⽤变量。Hive会先使⽤变量值替换掉查询的变量引⽤,然后才会将查询语句提交给查询处理器。
Hive中使⽤的变量和属性是放在不同的命令空间中,以便于区分。下表给出了Hive中使⽤的4种命名空间。
命名空间 | 使⽤权限 | 描述 |
---|---|---|
hivevar | 可读/可写 | ⽤户⾃定义变量 |
hiveconf | 可读/可写 | Hive相关的配置属性 |
system | 可读/可写 | Java定义的配置属性 |
env | 只读 | Shell环境(例如bash)定义的环境变量 |
注:变量和属性是在不同上下⽂中使⽤的术语,在⼤多数情况下它们的功能是⼀样的。
hivevar空间中定义的变量⽤于传参数 ,专⻔提供给⽤户⾃定义变量。在CLI中,可以使⽤set命令显示或者修改变量值。
下例显示env空间中HOME变量的值
直接使⽤set命令会打印出命令空间hivevar、hiveconf、system和env中所有的变量。使⽤set -v命令还会打印Hadoop中所定义的所有属性。
set命令还可⽤于给变量赋值。
# hive -d foo=bar
hive (default)> set foo;
foo=bar
hive (default)> set hivevar:foo;
hivevar:foo=bar
hive (default)> set hivevar:foo=bar2;
hive (default)> set foo;
foo=bar2
hive (default)> set hivevar:foo;
hivevar:foo=bar2
hivevar:是可选的,代表⽤户⾃定义变量的命名空间。
在CLI的查询语句中的变量引⽤会先被替换为具体的值,然后才会提交给查询处理器。例如:
--启动hive命令行并定义变量foo
hive -d foo=bar
--创建表book并使用了变量foo
hive (default)> create table book(id int, ${hivevar:foo} string);
--查看创建的表book
hive (default)> describe book;
OK
col_name data_type comment
id int
bar string
Time taken: 0.311 seconds, Fetched: 2 row(s)
--删除表book
hive (default)> drop table book;
--创建表book去掉hivevar:前缀
hive (default)> create table book(id int, ${foo} string);
--查看表结构发现,加不加hivevar:前缀表结构是一样的
hive (default)> describe book;
OK
col_name data_type comment
id int
bar string
Time taken: 0.311 seconds, Fetched: 2 row(s)
注意:变量名不能使⽤hive的保留关键字,否则会出现解析错误。
hiveconf空间中定义的变量⽤于配置Hive⾏为的所有属性,包括了hive-site.xml中配置的hive全局变量。
开启hive.cli.print.current.db属性,这个属性可以在CLI提示符前打印出当前所在数据库名,默认的数据库名为default。这个属性的默认值为false。
# hive --hiveconf hive.cli.print.current.db=true
hive (default)> set hive.cli.print.current.db;
hive.cli.print.current.db=true
hive (default)> set hiveconf:hive.cli.print.current.db=false;
hive> set hive.cli.print.current.db;
hive.cli.print.current.db=false
Java系统属性对system命名空间内容具有可读写权利,⽽env命令空间,对于环境变量只提供可读权限。注意和hivevar变量不同,⽤户必须使⽤system:或者env:前缀来指定系统属性和环境变量。
hive属性有3种配置⽅式,分别可以在hive-site.xml中配置、命令⾏参数中配置、SET设定参数配置,上述三种设定⽅式的优先级依次递增。即配置⽂件<命令⾏参数<参数声明。