7. 修改表的列定义
查看t_seq表的定义
hive> desc t_seq;
看到表t_seq只有两个字段
查看t_seq表的定义
hive> desc t_seq;
全部替换:
全部替换:
hive> alter table t_seq replace columns(id int,name string,address string,age int);
修改已存在的列定义:
hive> alter table t_seq change id uid string;
8. 显示命令
hive> show tables # 查看所有的表
hive> show databases # 查看所有数据库
hive> show partitions test_44; # 查看 test_44中所有的分区
hive> show functions #显示hive中所有的内置函数
hive> desc test_44; #显示表定义
hive> desc extended test_44; #显示表定义的详细信息
hive> desc formatted test_44; #显示表定义的详细信息,并且用比较规范的格式显示
清空表数据,保留表结构
hive> truncate table test_44;
设置本地运行hive的mapreduce,不提交给yarn
hive>set hive.exec.mode.local.auto=true;
9.DML
9.1 加载数据到表中
load
insert
插入单条数据:
hive> insert into table t_seq values(‘10’,‘xx’,‘beijing’,28);
hive> select * from t_seq;
假如有一个需求:
从test_44中筛选出不同的数据,插入另外两张表中;
hive> alter table test_4_st_200 add partition(day=‘lt200’);
insert into table test_4_st_200 partition(day=‘lt200’)
select ip,url,staylong from test_44 where staylong<200;
hive> select * from test_4_st_200;
我们再将staylong大于200的数据添加到test_4_st_200 ,day=‘gt200’,这分区中,如下:
hive> select * from test_4_st_200;
但是以上实现方式有一个弊端,两次筛选job,要分别启动两次mr过程,要对同一份源表数据进行两次读取。如果使用多重插入语法,则可以避免上述弊端,提高效率:源表只要读取一次即可。hive> from test_44
insert into table test_4_st_200 partition(day=‘lt200’)
select ip,url,staylong where staylong<200
insert into table test_4_st_200 partition(day=‘gt200’)
select ip,url,staylong where staylong>200;
hive> select * from test_4_st_200;
10.SELECT
Join
inner join
left join | left outer join
right join | right outer join
full outer join
其中 join与inner是一样的结果
1、内连接
两表关联,保留两表中交集的记录。
select a.,b.
from t_22 a join t_33 b
where a.id=b.id;
2、左连接
左表全部保留,左表关联不上的用null表示。SELECT a.,b. from t_22 a LEFT JOIN t_33 b on a.id=b.id
3、右连接
右表全部保留,左表关联不上的用null表示。
SELECT a.,b. from t_22 a RIGHT JOIN t_33 b on a.id=b.id
left outer join 与left join 结果一样
right outer join 与 right join结果一样
4.笛卡尔积
两表关联,把左表的列和右表的列通过笛卡尔积的形式表达出来。
SELECT * from t_22 a JOIN t_33 b ;
5、左表独有
两表关联,查询左表独有的数据。
SELECT a.,b. from t_22 a LEFT JOIN t_33 b on a.id=b.id WHERE b.id is NULL ;
6、右表独有
两表关联,查询右表独有的数据。
SELECT a.,b. from t_22 a RIGHT JOIN t_33 b on a.id=b.id WHERE a.id is NULL ;
7、全连接
两表关联,查询它们的所有记录。
oracle里面有full join,但是在mysql中没有full join。我们可以使用union来达到目的。
在hive里有full outer join的mysql没有
select a.* ,b.*
from t_22 a full outer join t_33 b
on a.id=b.id;
8、并集去交集
两表关联,取并集然后去交集。
小技巧
可以在hive中执行linux命令
hive> !ls /root;
在hive中显示字段名
hive> set hive.cli.print.header=true;
hive> set hive.resultset.use.unique.column.names=false;