数据仓库Hive学习(一)

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;

 

上一篇:Hive SQL、参数、自定义函数


下一篇:mysql表及用法