Load 数据文件
语法:LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]
说明:
从本地到HDFS是复制,从HDFS到HDFS上的Hive数据库是移动。
LOCAL表示从本地。
INTO 是追加, OVERWRITE INTO 是覆盖。
Insert 插入数据
hive> create table student2(id int,name string)
partitioned by(month string, day string)
row format delimited fields terminated by ' ';
示例1,普通插入:
hive> insert into table student2 partition(month=202001,day=01)
values(1,'baozi1'),(2,'baozi2'),(3,'baozi3');
示例2,从查询结果插入:
hive> insert into table student2 partition(month=202001,day=02)
select * from student;
示例3,同一表查询结果多插入:
hive> from student
insert into table student2 partition(month=202001,day=03)
select *
insert into table student2 partition(month=202001,day=04)
select *;
Truncate 清空表数据
hive> truncate table student2;
Select 查询
select语法 同mysql
hive> select * from stu_partition;
hive> select * from stu_partition where month=202001;
rlike:正则表达式
hive> select * from stu_partition where name like '%2';
stu_partition.id stu_partition.name stu_partition.month
2 baozi2 202001
2 baozi2 202002
hive> select * from stu_partition where name rlike '[2]';
stu_partition.id stu_partition.name stu_partition.month
2 baozi2 202001
2 baozi2 202002
排序 --------------------------------------
order by:全局排序,一个Reduce。
sort by:“分块”排序,每个Reduce内排序。
distribute by:指定分区,“分块”排序。联合使用:distribute by分区,sort by对分区数据排序,可以是不同的字段。
cluster by:等于相同字段的distribute by + sort by。
查询桶表 --------------------------------------
语法:
tablesample(bucket x out of y on ...)
x:从第几个bucket开始
y:从x开始,下一个就是x+y,x+y+y.....
取几个:bucket数/y,y必须是bucket数的倍数或者因子。
* x必须小于等于y
示例:
hive> select * from stu_bucket tablesample(bucket 1 out of 4 on id);
stu_bucket.id stu_bucket.name
1016 ss16
1012 ss12
1008 ss8
1004 ss4
hive> select * from stu_bucket tablesample(bucket 1 out of 1 on id);
stu_bucket.id stu_bucket.name
1016 ss16
1012 ss12
1008 ss8
1004 ss4
1009 ss9
1005 ss5
1001 ss1
1013 ss13
1010 ss10
1002 ss2
1006 ss6
1014 ss14
1003 ss3
1011 ss11
1007 ss7
1015 ss15
hive> select * from stu_bucket tablesample(bucket 1 out of 2 on id);
stu_bucket.id stu_bucket.name
1016 ss16
1012 ss12
1008 ss8
1004 ss4
1010 ss10
1002 ss2
1006 ss6
1014 ss14
case when 示例 --------------------------------------
emp_gender.txt
悟空 A 男
大海 A 男
宋宋 B 男
凤姐 A 女
婷姐 B 女
婷婷 B 女
hive> create table emp_gender(name string, dept_no string, gender string)
row format delimited fields terminated by ' ';
hive> load data local inpath '/home/user000/data/emp_gender.txt' into table emp_gender;
hive> select dept_no,
sum(case gender when '男' then 1 else 0 end) male,
sum(case gender when '女' then 1 else 0 end) femail
from emp_gender
group by dept_no;
结果
A 2 1
B 1 2
行转列 示例 --------------------------------------
CONCAT(colA, str, colB) CONCAT(colA, colB)
CONCAT_WS(separator, str1, str2, ...)
COLLECT_SET(col):汇总字段值产生array。
person_info.txt
孙悟空 白羊座 A
大海 射手座 A
宋宋 白羊座 B
猪八戒 白羊座 A
凤姐 射手座 A
hive> create table person_info(name string, constellation string, blood_type string)
row format delimited fields terminated by ' ';
hive> load data local inpath '/home/user000/data/person_info.txt' into table person_info;
hive> select t1.c1, concat_ws('|',collect_set(t1.name) )
from (select concat(constellation,',',blood_type) c1, name from person_info) t1
group by t1.c1;
结果
射手座,A 大海|凤姐
白羊座,A 孙悟空|猪八戒
白羊座,B 宋宋
列转行 示例 --------------------------------------
EXPLODE(col):将map、array拆分成多行。
LATERAL VIEW:
语法:LATERAL VIEW udtf(expression) tableAlias AS columnAlias
解释:和split、explode等UDTF一起使用,对拆分后的数据,根据数据原本的对应关系,进行聚合。
film_info.txt
《疑犯追踪》 悬疑,动作,科幻,剧情
《Lie to me》 悬疑,警匪,动作,心理,剧情
《战狼 2》 战争,动作,灾难
hive> create table file_info(movie string, category array)
row format delimited
fields terminated by '\t'
collection items terminated by ',';
hive> load data local inpath '/home/user000/data/film_info.txt' into table file_info;
hive> select movie,category_name
from file_info
lateral view explode(category) tmpTable as category_name;
+--------------+----------------+--+
| movie | category_name |
+--------------+----------------+--+
| 《疑犯追踪》 | 悬疑 |
| 《疑犯追踪》 | 动作 |
| 《疑犯追踪》 | 科幻 |
| 《疑犯追踪》 | 剧情 |
| 《Lie to me》 | 悬疑 |
| 《Lie to me》 | 警匪 |
| 《Lie to me》 | 动作 |
| 《Lie to me》 | 心理 |
| 《Lie to me》 | 剧情 |
| 《战狼 2》 | 战争 |
| 《战狼 2》 | 动作 |
| 《战狼 2》 | 灾难 |
+--------------+----------------+--+