内容来自于《大数据Hive离线计算开发实战》
Hive原理
Hive是一个基于Hadoop的数据仓库和分析系统,用于管理和查询大型数据集。以下是Hive的原理:
- 数据仓库:Hive将结构化的数据文件映射成一张表,并提供类SQL查询功能。用户可以使用类似SQL的查询语言(HQL)来管理和查询这些数据。Hive的表是纯逻辑表,本质上是Hadoop的目录/文件,达到了元数据与数据存储分离的目的。
- 转换机制:Hive的工作原理是通过将查询语句转换成MapReduce程序来执行。当用户输入Hive SQL时,它将被转换成一系列的MapReduce操作,从而完成查询的任务。这样可以提高性能,降低运行时间。
- 运行环境:Hive基于Hadoop,使用HDFS作为存储,使用MapReduce进行计算。Hive还包含一个Hive服务器,这是一个守护进程,用于管理查询和存储结果。
- 扩展性:Hive支持自定义函数(UDF),使用户可以根据自己的需要定义函数,以满足自己的数据挖掘需求。此外,Hive还支持自定义存储格式,可以将数据存储在不同的格式中,以方便查询。
- 高效性:Hive支持对HDFS上的数据进行并行处理,支持多种数据查询和分析。通过这种方式,Hive可以提高数据存储和查询的效率,从而提高系统性能。
总的来说,Hive是一个用于大数据处理的工具,其原理是通过将查询语句转换成MapReduce程序来执行,并利用Hadoop和HDFS进行存储和计算。通过这种方式,Hive可以简化复杂的数据挖掘和大数据分析工作,提高系统性能和效率。
对新手来说,你其实可以理解我就是正常操作结构化的数据库,类似于操作MySQL、PostgreSQL等数据库,写普通的SQL语句进行数据查询、分析。那我该篇文章也就是梳理最简单的最全的操作方法,帮助刚上手Hive的程序员快速开始写SQL语句进行查询分析数据。
Hive数据类型
基本数据类型
数据类型 | 长度 |
---|---|
TINYINT | 1byte有符号整数 |
SMALLINT | 2byte有符号整数 |
INT | 4byte有符号整数 |
BIGINT | 8byte有符号整数 |
BOOLEAN | 布尔类型 true 或者 false |
FLOAT | 单精度浮点数 |
DOUBLE | 双精度浮点数 |
STRING | 字符序列,可以指定字符集;可以使用单引号或双引号 |
TIMESTAMP | 整数、浮点数或者字符串 |
BINARY | 字节数组 |
集合数据类型
数据类型 | 描述 |
---|---|
STRUCT | 与C语言中的结构 struct类型相似,都可以通过“点”符号访问元素内容。例如,某表中某个列的数据类型为STRUCT(firName STRING,lastName STRING),那么第一个元素可通过字段名.firName来引用 |
MAP | MAP是一个键值对映射集合。例如,表中某个列的数据类型是MAP,存放数据的格式是键:值,通过键就可以获取值 |
ARRAY | ARRAY数组是一组具有相同类型变量的集合,这些变量被称为数组的元素,每个元素度有一个下标编号,编号从0开始 |
STRUCT数据类型案例
create table enterprise.employee(id int,info struct<name:string,age:int>) row format delimited fields terminated by ',' collection items terminated by ':';
数据实例
1,zhangsan:10
2,lisi:20
3,wangwu:30
MAP数据类型
create table enterprise.employee_1(id int,perf Map<string,int>) row format delimited fields terminated by '\t' collection items terminated by ',' map keys terminated by ':';
数据案例
1 job:80,team:60,person:50
2 job:60,team:70
3 job:80,team:90,person:100
ARRAY数据类型
create table enterprise.employee_2(name string,emp_id_list array<int>) row format delimited fields terminated by ',' collection items terminated by ':';
数据案例
zhangsan,1:2:3
lisi,4:5:6
wangwu,7:8:9
Hive数据定义与操作
HiveQL数据定义语言
创建数据库
hive> create database enterprise;
如果数据库enterprise
已经存在的话,会跑出一个异常。
所以命令可以改为
hive> create database if not exists enterprise;
查看Hive中所包含的所有数据库
hive> show databases;
查询数据库以e开头数据库
hive> show databases lik