Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。
Hive的优点:
其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
1、内部表(受控表)
完全被Hive控制,内部表删除,元数据、源数据一同被删除。
2、临时表
生命周期是一次会话,主要用于测试。
创建临时表:create TEMPORARY table ttabc(id Int,name String)
3、外部表
不是完全受Hive控制,源数据可以在任何的目录下,删除外部表,源数据不会被删除,只是删除元数据。
创建外部表:
create external table wc_external
(word1 STRING,
word2 STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ' '
location '/test/external';
注:location可加可不加,不加location默认是在hive的工作目录区
问题:
4. 分区表
将源数据分到不同的Hive工作目录中存储,一个分区对应一个目录,防止暴力扫描全表。
静态分区表:
分区是由用户自定义的。
(1)单分区表
创建单分区表:
create table day_table (id int, content string) partitioned by (dt string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ;
加载数据:
①单条插入的方式往分区表中插入数据:
insert into day_table partition (dt = "9-26") values(1,"and");
②批量插入的方式往分区表中插入数据:
oad data local inpath "/root/ceshi" into table day_table partition (dt="9-27");
(2)多分区表
创建多分区表:
create table day_hour_table (id int, content string) partitioned by (dt int,hour int) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ;
加载数据:
①单条插入的方式往分区表中插入数据:
insert into day_hour_table partition(dt=9,hour=1) values(1,"a2 bc");
②批量插入的方式往分区表中插入数据:
load data local inpath "/root/ceshi" into table day_table partition (dt=10,hour=10);
删除Hive分区表中的分区:
ALTER TABLE day_table DROP PARTITION (dt=10,hour=10);
动态分区表:
动态分区可以根据数据本身的特征自动来划分分区(比如我们可以指定按照数据中的年龄、性别来动态分区)
静态分区与动态分区创建表的语句是一模一样的。
查询分区数:
show partitions gfstbl_dynamic;
5、分桶表
分桶表是由列的哈希值除以桶的个数来决定每条数据划分在哪个桶中分成不同的桶进行存储,方便随机取样以及join等操作。
创建分桶表:
CREATE TABLE psnbucket( id INT, name STRING, age INT)
CLUSTERED BY (age) INTO 4 BUCKETS
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
方式一(普通方式):
CREATE TABLE test(
id INT,
name STRING,
age INT,
gfs ARRAY,
address MAP,
info STRUCT
)
方式二:
create table test1 like test;
注意:只是创建表结构
方式三:
create table test2 AS SELECT id,name,gfs,address from test1;
不仅会创建相应的表结构,并且会插入数据
1、Insert
INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement1 FROM from_statement;
2、Load
load data local inpath '/root/test.txt' into table test;
3、查询其它表数据Insert到新表中
insert into rest select count(*) from table;
Hive视图与MySql数据库的视图一样。其特点有:
问题:
在创建视图的时候会不会启动MR任务?
不会,视图的创建,只是保存一份元数据,查询视图时才执行对应的操作。
查看已创建的视图:
show tables
删除视图:
drop view view1
什么是索引?
索引类似目录,使用索引可以优化查询性能。
索引库,用于保存一些索引的元数据。
创建索引:
create index t1_index on table psn2(name)
as 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler'
with deferred rebuild in table t1_index_table;
查询索引:
show index on psn2;
删除索引:
DROP INDEX IF EXISTS t1_index ON psn2; //删除索引的同时,索引库也会被删除
Hive的搭建方式有三种:
搭建步骤可参考—Hive的三种搭建方式