1.hive中的变量
1.查看所有的变量
hive> set;
2.变量及属性
命名空间 | 使用权限 | 描述 |
hivevar | 可读/可写 | 用户自定义变量 |
hiveconf | 可读/可写 | Hive相关的配置属性 |
system | 可读/可写 | Java定义的配置属性 |
env | 只可读 | shell环境定义的环境变量 |
3.定义变量
–define key=value 与 --hivevar key=value 是等价的
示例:
$ hive --define y=5
hive> set y;
y=5
引用变量:
hive> select * from table1 where i=${hivevar=y}
hive> select * from table1 where i=${y}
2.hive执行查询语句
执行一条sql语句:
$ hive -e "select * from table1 limit 10"
保存查询结果至/txx/hive_result:
$ hive -S -e "select * from table1" > /txx/hive_result
执行一个sql脚本:
$ hive -f /path/to/file/query.sql
在hive命令行中执行命令
hive> source /path/to/file/query.sql
在hive命令前加上一个!并以;结束,就可以在hive命令行中执行shell命令:
hive> !pwd;
在hive命令中执行hadoop fs -ls /,只需要把hadoop关键字去掉即可执行
hive> dfs -ls /;
设置查询时打印字段名称:
hive> set hive.cli.print.header=true;
设置提示符中,显示当前所在的数据库:
hive> set hive.cli.print.current.db=true;
3.强行删除数据库
hive不允许用户删除一个包含有表的数据库,即使表是空表也不行。需要先删除表,才能删除库。
但是,也可以在命令后面加上关键字cascade强制删除。
hive> drop database if exists tempdb cascade;
4.复制表
- 非分区表
hive> create table t_copy as select * from t_temp;
- 分区表
hive> create table t_copy like t_partition;
hive> insert overwrite table t_copy partition(dt)
> select * from t_partition;
要求:这里是动态插入,要求t_copy表是nostrict模式。
5.修改表信息
1.修改外部表的存放路径
hive> alter table t_temp set location '/txx/temp';
2.表重命名
hive> alter table t_temp rename to t_temp1;
3.修改列信息
hive> alter table t_+temp
> change column idx id string comment '***'
> after name;
4.修改存储属性
hive> alter table t_temp set FileFormat SEQUENCEFILE;
6.对分区表的保护措施
防止对分区表进行误删或者查询
hive> alter table t_temp partition(year=2019) ENABLE NO_DROP; #禁止删除
hive> alter table t_temp partition(year=2019) ENABLE OFFLINE; #禁止查询
这里的ENABLE可被替换成DISABLE,达到反向操作的目的,这些操作都不可用于非分区表。
7.like与Rlike
like不加缀述
rlike字句是hive对like的扩展,例如在被查的一个结构化字段时:
hive> select name,address.street from employee
> where address.street RLIKE '.*(Chicago(Ontario)).*';
8.Having字句的使用
9.Join字句
hive总是按照从左到右的顺序执行的。
hive> select a.cloumn1,b.column2,c.column3
> from a join b on a.column1=b.column1
> join c on a.column1=c.column1;
上例中,Hive会对每对join对象启动一个MapReduce任务,所以首先会启动一个MapReduce Job对表a和表b进行连接操作,然后再启动一个Job将第一个MR的结果与表C进行连接操作,当对3个或者多个表进行Join操作时,如果每个on字句都使用相同的链接键的话,那么只会产生一个MapReduce Job.
说明:如果Join操作,尽量将小表放在左边,系统会将其加载到内存,使得Join能更快的执行。
10.视图
1.降低查询复杂度(可以将嵌套查询的字句改为视图)
2.限制基于条件过滤的数据(只暴露部分数据,可保护重要信息数据不被随意查询)
hive> create table userinfo(firstname string,lastname string,id string,passwd string);
hive> create view safe_info as
> select firstname ,id
> from userinfo
>where id like "510*";
注意:
1.没有show views的语句
2.不能使用drop table语句来删除视图,要用drop view
3.视图是只读的,不能用作insert语句或者load命令
4.只允许修改元数据中的Tbproperties属性内容
11.分区模式
这个就根据实际需求来吧。分区的好处简直太多了!
12.hive调优相关
见下篇文章。
13.压缩与文件格式