Hive
Hive是基于Hadoop的数据仓库工具,可以将结构化的数据文件映射为一张数据库表,提供简单的SQL查询功能,将SQL语句转化为MapReduce任务进行运行
HIve不支持数据的修改或删除
Hive简介
什么是Hive
HIve是一个翻译器:SQL→HIve引擎→MapReduce程序
HIve是构建在HDFS上的一个数据仓库
HIve支持SQL
为什么要使用Hive
降低学习MapReduce的复杂度,使DBA、运维人员可以通过SQL来实现
HiveQL
HIve支持的数据类型
基本数据类型:整型、浮点型、布尔类型、字符串
复杂数据类型:Array数组、Map集合、Struct结构体
时间类型:Date、Timestamp
数据模型
内部表
与数据库中的Table在概念上是类型的
每一个Table在HIve中都有一个相应的目录存储系统
所有的Table数据都保存在这个目录中
删除表时,数据都会被删除
外部表
指向已经在HDFS中存在的数据
它和内部表在数据的组织上是相同的,而实际数据的存储则有较大的差异
外部表只与外部数据建立一个连接,删除外部表时,仅删除该连接
桶表
对数据进行哈希取值,然后放到不同的文件存储
需要设置环境变量:set hive.enforce.bucketing = true;
临时表
表只对当前session有效,session退出后,表自动删除
视图
视图是一种虚表,是一个逻辑概念;可以跨越多张表
视图建立在已有表的基础上,视图赖以建立的这些表称为基表
视图可以简化复杂的查询,但不能提高查询效率
HQL语句
建表语句
原生数据类型
create table t_user( id int, name string, age int, score double ) comment "用户信息" row format delimited fields terminated by ",";
复杂数据类型的使用
create table t_user2( id int, name string, age int, scores map<string,int> ) row format delimited fields terminated by "," --指定字段之间分隔符 collection items terminated by "-" --指定集合元素之间分隔符 map keys terminated by ":"; --指定map元素K,V之间分隔符
创建外部表
使用external关键字,默认为内部表
create external table t_user( --使用external关键字后,创建的表为外部表 id int, name string, age int, score double ) comment "用户信息" row format delimited fields terminated by ",";
分区表
使用partitioned by (属性名 类型)
分区使用的属性名不能和表中属性名重复
create external table t_user( id int, name string, age int, score double ) comment "用户信息" partitioned by (name_temp string) row format delimited fields terminated by ",";
分区表导入数据
load data local inpath "user1.txt" into table t_user partition(name_temp="user_1"); load data local inpath "user2.txt" into table t_user partition(name_temp="user_2"); load data local inpath "user3.txt" into table t_user partition(name_temp="user_3");
桶表
使用clustered by(字段)into 分为几桶 buckets
使用sorted by (字段 升序/降序) 排序
create table t_user( id int, name string, age int, score double ) clustered by (age) --根据age字段分桶 sorted by (age desc) into 5 buckets; --根据age字段排序,分为5桶