7. 修改表的列定义

查看t_seq表的定义

hive> desc t_seq;

hive 表查看时区 hive如何查看表_表关联


看到表t_seq只有两个字段

查看t_seq表的定义

hive> desc t_seq;

hive 表查看时区 hive如何查看表_hive 表查看时区_02


全部替换:

全部替换:

hive> alter table t_seq replace columns(id int,name string,address string,age int);

hive 表查看时区 hive如何查看表_表关联_03


修改已存在的列定义:

hive> alter table t_seq change id uid string;

hive 表查看时区 hive如何查看表_hive_04

8. 显示命令

hive> show tables # 查看所有的表

hive 表查看时区 hive如何查看表_hive 表查看时区_05


hive> show databases # 查看所有数据库

hive 表查看时区 hive如何查看表_表关联_06


hive> show partitions test_44; # 查看 test_44中所有的分区

hive 表查看时区 hive如何查看表_hive_07


hive> show functions #显示hive中所有的内置函数

hive 表查看时区 hive如何查看表_数据_08


hive> desc test_44; #显示表定义

hive 表查看时区 hive如何查看表_数据_09


hive> desc extended test_44; #显示表定义的详细信息

hive 表查看时区 hive如何查看表_hive_10


hive> desc formatted test_44; #显示表定义的详细信息,并且用比较规范的格式显示

hive 表查看时区 hive如何查看表_hive_11


清空表数据,保留表结构

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 表查看时区 hive如何查看表_表关联_12


hive> select * from t_seq;

hive 表查看时区 hive如何查看表_数据_13


假如有一个需求:

从test_44中筛选出不同的数据,插入另外两张表中;

hive> alter table test_4_st_200 add partition(day=‘lt200’);

hive 表查看时区 hive如何查看表_数据_14

insert into table test_4_st_200 partition(day=‘lt200’)
select ip,url,staylong from test_44 where staylong<200;

hive 表查看时区 hive如何查看表_表关联_15


hive> select * from test_4_st_200;

hive 表查看时区 hive如何查看表_数据_16


我们再将staylong大于200的数据添加到test_4_st_200 ,day=‘gt200’,这分区中,如下:

hive 表查看时区 hive如何查看表_表关联_17


hive> select * from test_4_st_200;

hive 表查看时区 hive如何查看表_表关联_18


但是以上实现方式有一个弊端,两次筛选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 表查看时区 hive如何查看表_表关联_19


hive> select * from test_4_st_200;

hive 表查看时区 hive如何查看表_hive_20

10.SELECT

Join
inner join
left join | left outer join
right join | right outer join
full outer join
其中 join与inner是一样的结果

1、内连接

两表关联,保留两表中交集的记录。

hive 表查看时区 hive如何查看表_数据_21


select a.,b.

from t_22 a join t_33 b

where a.id=b.id;

hive 表查看时区 hive如何查看表_hive_22

2、左连接

hive 表查看时区 hive如何查看表_表关联_23


左表全部保留,左表关联不上的用null表示。SELECT a.,b. from t_22 a LEFT JOIN t_33 b on a.id=b.id

hive 表查看时区 hive如何查看表_hive_24

3、右连接

右表全部保留,左表关联不上的用null表示。

hive 表查看时区 hive如何查看表_数据_25


SELECT a.,b. from t_22 a RIGHT JOIN t_33 b on a.id=b.id

hive 表查看时区 hive如何查看表_表关联_26


left outer join 与left join 结果一样

right outer join 与 right join结果一样

4.笛卡尔积

两表关联,把左表的列和右表的列通过笛卡尔积的形式表达出来。

SELECT * from t_22 a JOIN t_33 b ;

hive 表查看时区 hive如何查看表_hive_27

5、左表独有

两表关联,查询左表独有的数据。

hive 表查看时区 hive如何查看表_hive 表查看时区_28


SELECT a.,b. from t_22 a LEFT JOIN t_33 b on a.id=b.id WHERE b.id is NULL ;

hive 表查看时区 hive如何查看表_hive_29

6、右表独有

两表关联,查询右表独有的数据。

hive 表查看时区 hive如何查看表_表关联_30


SELECT a.,b. from t_22 a RIGHT JOIN t_33 b on a.id=b.id WHERE a.id is NULL ;

hive 表查看时区 hive如何查看表_数据_31

7、全连接

两表关联,查询它们的所有记录。

hive 表查看时区 hive如何查看表_hive_32


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;

hive 表查看时区 hive如何查看表_hive 表查看时区_33

8、并集去交集

两表关联,取并集然后去交集。

hive 表查看时区 hive如何查看表_hive 表查看时区_34

小技巧

可以在hive中执行linux命令

hive> !ls /root;

hive 表查看时区 hive如何查看表_表关联_35


在hive中显示字段名

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

hive> set hive.resultset.use.unique.column.names=false;