(一)Hive简介
1、Hive基本概念
Hive基于hadoop的一个数据仓库工具:
hive本身不提供数据存储功能,使用HDFS做数据存储;
hive也是分布式计算框架,hive的核心工作就是把SQL语句翻译成MR程序;
hive不提供资源调度,也是默认由Hadoop当中yarn集群来调度;
可以将结构的数据映射为一张数据库表,并提供HQL(Hive SQL)查询功能。
(二)数据仓库与数据库的区别
数据库只存在当前值(近几年),数据仓库存放历史值(5-10年都可以);
数据库内数据是动态变化的,只要有业务发生,数据就会被更新,而数据仓库则是静态的历史数据,只能定期添加、刷新;
数据库中的数据结构比较复杂,有各种结构以适合业务处理系统的需要,而数据仓库中的数据结构则相对简单;
数据库中数据访问频率较高,但访问量较少,而数据仓库的访问频率低(只要做查询)但访问量却很高;
数据库中数据的目标是面向业务人员的,为业务处理人员提供信息处理的支持,而数据仓库则是面向高层管理人员的,为其提供决策支持;
数据库在访问数据时要求响应速度快,其响应时间一般在几秒内,而数据仓库的响应时间则可长达数几小时(因为底层是mapreduce,所以比较慢)。
(三)Hive数据类型
1、基本数据类型
2、复杂数据类型
(四)基本语句
1、创建数据库
【语法】
CREATE (DATABEAS[SCHEMA]) [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path]
[WITH DBPROPERITIES (property_name=propery_value,...)];
【例子】
CREATE DATABASE myhive
COMMENT '测试库';
2、使用数据库
【语法】
USE database_name;
【示例】
(1)查看数据库:SHOW DATABASES;
(2)使用数据库:USE myhive;
3、删除数据库
【语法】
DROP (DATABASE|SCHEMA) (IF NOT EXISTS) database_name [RESTRICT|ASCADE];
ASCADE强制删除数据库
4、创建数据表
(1)直接建表法
CREATE TABLE t1(
id INT,
name STRING,
hobby ARRAY
add MAP
ROW FORMAT DELIMITED
FIELDS ITEMS TERMIMATED BY ',' # 按逗号分割
COLLECTION ITEMS TERMINATED BY '-'
MAP KEYS TERMINATED BY ':' # MAP类型通过:分割
)
(2)查询建表法
CREATE TABLE t2 AS
SELECT id,
name
FROM t1;
(3)like建表法 只会把表结构复制过去,但是不会复制表内的数据
CREATE TABLE empty_key_value_store
LIKE key_value_store
5、修改表
(1)修改表名
ALTER TABLE old_name RENAME TO new_name;
(2)修改列名
ALTER TABLE name CHAR column_name new_name new_type;
(3)增加列
ALTER TABLE emp ADD COLUMNS(age INT);
6、删除表
DROP TABLE [IF NOT EXISTS] table_name [PUREG];
7、导入数据
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename PARTITION (partcol1=val1,partcol2=val2...)
(1)从本地导入到hive表
LOAD DATA LOCAL INPATH '/home/hadoop/haha.txt' INTO TABLE t1;
(2)从hdfs导入到hive表LOAD DATA INPATH '/test' INTO TABLE t1;
8、导出数据
(1)保存到本地
INSERT OVERWRITE LOCAL DIRECTORY '/home/hadoop/' SELECT * FROM t1;
(2)保存到hdfs
INSERT OVERWRITE DIRECTORY '/abc' SELECT * FROM t1;
(五)管理表(内部表)、外部表、分区表
(1)内部表:内部表创建的时候,在hdfs上面也会创建一个目录,删除的时候会把hdfs上面的数据也一并删除,故不常用。
(2)外部表:外部表创建的时候,在hdfs上面也会创建一个目录,删除的时候只会删除表的元数据和结构,而不会删除hdfs上面的数据。
CREATE EXTERNAL TABLE t1(
id INT,
name STRING )
ROW FORMAT DELIMITED
FIELDS TERMIMATED BY ',';
(3)分区表:hive中没有索引,导致查询速度很慢,如果不设置分区,则每次查询会全表扫描。
CRETAE TABLE logs(
ts INT,
line STRING)
parttional by(dt string,country string);
(4)查看分区show partitions 表名
show partitions 表名