转载请注明出处:https://blog.csdn.net/l1028386804/article/details/88379104
Hive连接数据库的配置
javax.jdo.option.ConnectionURL
jdbc:mysql://127.0.0.1:3306/hive?createDatabaseIfNotExist=true&useSSL=false
JDBC connect string for a JDBC metastore
javax.jdo.option.ConnectionUserName
root
username to use against metastore database
javax.jdo.option.ConnectionPassword
root
password to use against metastore database
javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver
Driver class name for a JDBC metastore
在CLI提示符前打印出当前所在的数据库名
hive --hiveconf hive.cli.print.current.db=true;
或者进行hive命令行后:
set hiveconf:hive.cli.print.current.db=true;
在CLI提示符前不显示当前所在的数据库名
set hiveconf:hive.cli.print.current.db=false;
增加新的hiveconf属性
hive --hiveconf y=5
hive> set y;
y=5
set命令定义变量:
hive --define foo=bar
hive> set foo;
foo=bar
hive> set hivevar:foo=bar2;
hive> set foo;
foo=bar2
hive>
前缀hivevar:是可选的。--hivevar标记和--define标记是相同的。
利用上面创建的变量建表:
hive> create table toss1(i int, ${hivevar:foo} string);
OK
Time taken: 5.163 seconds
hive> desc toss1;
OK
i int
bar2 string
Time taken: 0.42 seconds, Fetched: 2 row(s)
hive> create table toss2(i int, ${foo} string);
OK
Time taken: 0.099 seconds
hive> desc toss2;
OK
i int
bar2 string
Time taken: 0.067 seconds, Fetched: 2 row(s)
Java系统属性对system命名空间内容具有可读可写权利; evn命名空间,对于环境变量只提供可读权限:
hive> set system:user.name;
system:user.name=root
hive> set system:user.name=yourusername;
hive> set system:user.name;
system:user.name=yourusername
hive> set env:HOME;
env:HOME=/root
“一次使用”命令
hive -e "select * from mytable"
开启静默模式,在输出结果中去掉"OK"和"Time taken"等行
hive -S -e "select * from mytable"
当用户不能完整记清楚某个属性名时,可以模糊获取这个属性名而无需滚动set命令的输出结果进行查找,这里,假设用户没记清哪个属性指定了管理表的"warehouse(数据仓库)"的路径,通过如下命令可以查看到:
[root@binghe ~]# hive -S -e "set" | grep warehouse
hive.metastore.warehouse.dir=/user/hive/warehouse
hive.warehouse.subdir.inherit.perms=true
Hive中可以使用-f文件名方式执行指定文件中的一个或者多个查询语句。一般把这些Hive查询文件保存为具有.q或者hql后缀的文件。
hive -f /path/to/file/withqueries.hql
在Hive Shell中用户可以使用source命令执行一个脚本文件。
hive
hive> source /path/to/file/withqueries.hql
hiverc文件
-i 文件名,这个选项允许用户指定一个文件,当CLI启动时,在提示符出现前会先执行这个文件,Hive会自动在HOME目录下寻找名为.hiverc的文件,而且会自动执行这个文件中的命令。
对于用户需要频繁执行的命令,使用这个文件非常方便。
比如,$HOME/.hiverc文件:
ADD jar /path/to/custom_hive_extensions.jar;
set hive.cli.print.current.db=true;
set hive.exec.mode.local.auto=true;
执行Shell命令
用户不需要退出hive CLI就可以执行简单的bash shell命令,只要在命令前加上!并且以分号(;)结尾就可以:
hive> ! echo 'binghe';
'binghe'
hive> !pwd;
/root
hive>
Hive CLI中不能使用需要用户进行输入的交互式命令,而且不支持shell的"管道"功能和文件名的自动补全功能。
在Hive中使用Hadoop的dfs命令
在Hive中使用Hadoop的dfs命令,只需要将Hadoop命令中的关键字去掉,以分号结尾。
hive> dfs -ls /;
Found 3 items
drwxr-xr-x - root supergroup 0 2019-03-03 19:10 /root
drwx------ - root supergroup 0 2019-03-04 14:15 /tmp
drwxr-xr-x - root supergroup 0 2019-03-04 12:36 /user
Hive中的注释
以--开头的字符串表示注释
注意:有注释的HQL语句,只能放在脚本中通过 hive -f script_name 的方式执行。
显示字段名称
设置 hiveconf 配置项 hive.cli.print.header为true来开启这个功能:
hive> set hiveconf:hive.cli.print.header=true;
hive> select * from dbs;
OK
dbs.db_id dbs.desc dbs.db_location_uri dbs.name dbs.owner_name dbs.owner_type
1 Default Hive database hdfs://liuyazhuang11:9000/user/hive/warehouse default public ROLE
如果想总是看到字段名称,那么只需要将第1行set hiveconf:hive.cli.print.header=true;添加到$HOME/.hiverc文件中即可。