1、Hive基本概念
- hive是一个分布式计算框架,核心工作是把sql语句翻译成MR程序
- hive可以将结构化的数据映射成一张数据库表,并提供HQL(Hive SQL)查询功能
- hive使用HDFS做数据存储
- hive默认由Hadoop中YARN集群来调度资源系统
2、数据仓库和数据库的区别
- 数据库内数据是动态变化的,只要有业务发生,数据就会被更新;而数据仓库则是静态的历史数据,只能定期添加、刷新;
- 数据库内数据访问频次高,访问量少;而数据仓库则相反;
- 数据库的访问要求响应速度快;而数据仓库的响应时间会比较长;
3、Hive数据类型
基本数据类型:
数据类型 | 所占字节 | 支持版本 |
TINYINT | 1字节,从-128~127 | |
SMALLINT | 2字节,从-32768~32767 | |
INT | 4字节,从-2,147,483,648到2,147,483,647 | |
BIGINT | 8字节,... | |
FLOAT | 4字节,单精度浮点数 | |
DOUBLE | 8字节,双精度浮点数 | |
DATE | 仅从Hive0.12.0开始 | |
STRING |
复杂数据类型:
数据类型 | 描述 | 示例 |
ARRAY | 一组有序字段,字段的类型必须相同 | array(1,2) |
MAP | 一组无序的键值对。键的类型必须是原子的,值可以是任何类型,同一个映射的键的类型必须相同,值得类型也必须相同 | map('a':1,'b':2) |
STRUCT | 一组命名的字段,字段类型可以不同 | struct('a',1,1,0) |
4、创建数据库
语法:
CREATE (DATABASE|SCHEMA)(IF NOT EXISTS) database_name
[COMMENT database_comment]
[LOCATION hdfs_path]
[WITH DBPROPERTIES(property_name=property_value,...)];
例子:
CREATE DATABASE myhive
COMMENT '测试库'
5、使用数据库
语法:
USE database_name;
USE DEFAULT;
例子:
1、查看数据库
show databases;
2、使用数据库
use myhive;
6、删除数据库
语法:
DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];
例子:
drop database if exists myhive cascade;
7、创建数据表
直接建表法:
CREATE TABLE t1(
id INT,
name STRING,
hobby ARRAY<STRING>,
add MAP<STRING,STRING>
)
ROW FORMAT DELIMITED,
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '-'
MAP KEYS TERMINATED BY ':'
;
查询建表法:
CREATE TABLE t2 AS
SELECT
id,
name
FROM t1
;
like建表法:
CREATE TABLE empty_key_value_store LIKE key_value_store;
例子:CREATE TABLE t3 LIKE t2;
8、管理表(内部表、外部表、分区表)
内部表:
CREATE TABLE t1(
id INT,
name STRING,
hobby ARRAY<STRING>,
add MAP<STRING,STRING>
)
ROW FORMAT DELIMITED,
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '-'
MAP KEYS TERMINATED BY ':'
;
外部表:
CREATE EXTERNAL TABLE t5(
id INT,
name STRING
)
ROW FORMAT DELIMITED,
FIELDS TERMINATED BY ','
;
分区表:
CREATE TABLE logs
(
ts INT,
line STRING
)
partitioned by (dt string,country string);
load data local inpath '/home/hadoop/file1' into table logs
partition(dt='2001-01-01',country='GB');
load data local inpath '/home/hadoop/file2' into table logs
partition(dt='2001-01-01',country='GB');
9、修改表
修改表名:
ALTER TABLE old_name RENAME TO new_name;
修改列名:
ALTER TABLE name CHANGE column_name new_name new_type;
增加列:
ALTER TABLE emp ADD COLUMNS(age INT);
10、删除表
DROP TABLE [IF EXISTS] table_name [PURGE];
例子:DROP TABLE IF EXISTS t4;
11、插入数据
从本地导入到hive表:
LOAD DATA LOCAL INPATH '/home/hadoop/haha.txt' INTO TABLE t1;
从hdfs导入到hive表:
LOAD DATA INPATH '/test' INTO TABLE t5;
12、导出数据
保存到本地:
INSERT OVERWRITE LOCAL DIRECTORY 'home/hadoop' SELECT * FROM t1;
保存到hdfs:
INSERT OVERWRITE DIRECTORY '/abc' SELECT * FROM t1;