(一)Hive简介


1、Hive基本概念

Hive基于hadoop的一个数据仓库工具:
hive本身不提供数据存储功能,使用HDFS做数据存储;
hive也是分布式计算框架,hive的核心工作就是把SQL语句翻译成MR程序;
hive不提供资源调度,也是默认由Hadoop当中yarn集群来调度;
可以将结构的数据映射为一张数据库表,并提供HQL(Hive SQL)查询功能。

(二)数据仓库与数据库的区别

数据库只存在当前值(近几年),数据仓库存放历史值(5-10年都可以);
数据库内数据是动态变化的,只要有业务发生,数据就会被更新,而数据仓库则是静态的历史数据,只能定期添加、刷新;
数据库中的数据结构比较复杂,有各种结构以适合业务处理系统的需要,而数据仓库中的数据结构则相对简单;
数据库中数据访问频率较高,但访问量较少,而数据仓库的访问频率低(只要做查询)但访问量却很高;
数据库中数据的目标是面向业务人员的,为业务处理人员提供信息处理的支持,而数据仓库则是面向高层管理人员的,为其提供决策支持;
数据库在访问数据时要求响应速度快,其响应时间一般在几秒内,而数据仓库的响应时间则可长达数几小时(因为底层是mapreduce,所以比较慢)。

(三)Hive数据类型

1、基本数据类型

Hive设置矿池 hiveon矿池_大数据

2、复杂数据类型

Hive设置矿池 hiveon矿池_hive_02

(四)基本语句

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 表名