hive基本概述以及DDL,DMLc操作

Hive(一)

一.hive基础

1.hive产生背景

(1)直接使用mapreduce所面临的问题

​ 1)、人员学习成本太高

2)、项目周期要求太短

3)、MapReduce实现复杂查询逻辑开发难度太大

(2)为什么要使用 Hive:

1)、更友好的接口:操作接口采用类 SQL 的语法,提供快速开发的能力

2)、更低的学习成本:避免了写 MapReduce,减少开发人员的学习成本

3)、更好的扩展性:可自由扩展集群规模而无需重启服务,还支持用户自定义函数

2.Hive含义

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,可以将SQL语句转换成MapReduce任务运行。使不熟悉MapReduce的用户很方便地利用HQL处理和计算HDFS上的结构化的数据,适用于离线的批量数据计算。

Hive依赖于HDFS存储数据,Hive 将HQL转换成mapreduce执行,所以说hive是基于hadoop的一个数据仓库工具,是指就是一款基于HDFS的MapReduce计算框架,对存储在HDFS中的数据进行分析和管理。

3.Hive特点

(1).可扩展:Hive可以自由扩展集群的规模,一般情况下不需要重启服务

(2).延展性:Hive支持用户自定义函数,用户可以根据自己的需求来实现自定义的函数

(3).容错性:良好的容错性,即使节点出现问题SQL仍可完成执行。

优势:

  • 提供了一个简单的优化模型
  • HQL类SQL语法,简化MR开发
  • 支持在不同的计算框架上运行
  • 支持在HDFS和HBase上临时查询数据
  • 支持用户自定义函数、格式
  • 成熟的JDBC和ODBC驱动程序,用于ETL和BI
  • 稳定可靠(真实生产环境)的批处理
  • 有庞大活跃的社区

二.Hive架构

hive的体系结构可以分成以下几个部分

1.用户接口

CLI:即Shell命令行(Command Line Interface),采用交互形式使用Hive命令行与Hive进行交互

JDBC/ODBC:是Hive的基于JDBC操作提供的客户端,用户通过这连接至Hive sever服务

Web UI:通过浏览器访问Hive

2.跨语言服务

​ Thrift是Facebook开发的一个软件框架,可以用来进行可扩展且跨语言的服务的开发,Hive集成了该服务,

能让不同的编程语言调用Hive的接口。

3.底层的Driver

驱动器Driver,编译器Compiler,优化器Optimizer,执行器Executor,Driver组件完成HQL查询语句从语法分析,语法分析,编译,优化,以及生产逻辑执行计划的生成。生成的逻辑之和星计划存储在HDFS中,并随后又MapReduce调用执行。

Hive的核心是驱动引擎,驱动引擎又四个部分组成:

(1)解释器:将HiveSQL语句转换为抽象语法树(AST)

(2)编译器:是将语法树编译成逻辑执行计划

(3)优化器:优化器是对逻辑执行计划进行优化

(4)执行器:执行器是调用底层的运行框架执行逻辑执行计划

4.元数据存储系统

元数据存储在Hive中的数据的描述信息,HCatalog:将Hive元数据共享给其他应用程序

Hive 中的元数据通常包括:表的名字,表的列和分区及其属性,表的属性(内部表和 外部表),表的数据所在目录

Metastore 默认存在自带的 Derby 数据库中。缺点就是不适合多用户操作,并且数据存 储目录不固定。数据库跟着 Hive 走,极度不方便管理。

实际生产一般存储在MySQL中,修改配置文件hive-site.xml

5.执行流程

​ HiveQL 通过命令行或者客户端提交,经过 Compiler 编译器,运用 MetaStore 中的元数 据进行类型检测和语法分析,生成一个逻辑方案(Logical Plan),然后通过的优化处理,产生 一个 MapReduce 任务。

三.Hive数据存储模型

Hive中所有的数据都在存储HDFS中,没有专门的数据存储格式;只需要在创建表的适合告诉hive数据中的列分隔符和行分隔符,hive就可以解析数据

在这里插入图片描述

hive中的数据模型:

(1)db:在HDFS中表现为:${hive.metastore.warehouse.dir}目录下的一个文件夹。

(2)table:在HDFS表现为所属db目录下的一个文件夹

(3)external table:与table类似,但其数据存放位置可以在任意位置指定路径

(4)partition:在HDFS中表现为table目录下的子目录

(5)bucket:在HDDFS中表现为同一个表目录下根据hash散列之后的多个文件。

在这里插入图片描述

四.数据类型

1.基本数据类型

类型 描述 示例
boolean true/false TRUE
tinyint 1字节的有符号整数 -128~127 1Y
smallint 2个字节的有符号整数,-32768~32767 1S
int 4个字节的带符号整数 1
bigint 8字节带符号整数 1L
float 4字节单精度浮点数 1.0
double 8字节双精度浮点数 1.0
deicimal 任意精度的带符号小数 1.0
String 字符串,变长 “a”,’b’
varchar 变长字符串 “a”,’b’
char 固定长度字符串 “a”,’b’
binary 字节数组 无法表示
timestamp 时间戳,纳秒精度 122327493795
date 日期 ‘2018-04-07’

2.复杂数据类型

类型 描述 示例
array 有序的的同类型的集合 array(1,2)
map key-value,key必须为原始类型,value可以任意类型 map(‘a’,1,’b’,2)
struct 字段集合,类型可以不同 struct(‘1’,1,1.0), named_stract(‘col1’,’1’,’col2’,1,’clo3’,1.0)
示例建表

(1)有表数据文件employee.txt如下

Michael|Montreal,Toronto|Male,30|DB:80|Product:DeveloperLead
Will|Montreal|Male,35|Perl:85|Product:Lead,Test:Lead
Shelley|New York|Female,27|Python:80|Test:Lead,COE:Architect
Lucy|Vancouver|Female,57|Sales:89|Sales:Lead

(2)建表employee

create table employee(
name string,
address array<string>,
personaInfo array<string>,
technol map<string,int>,
jobs map<string,string>)
row format delimited
fields terminated by '|'             #列分隔符
collection items terminated by ','   #map struct和array的分隔符
map keys terminated by ':'           #MAP中的key与value的分隔符
lines terminated by '\n';            #行分隔符

(3)上传表

 hdfs dfs -put /root/employee.txt /opt/hive/warehouse/employee/

(4)访问数据

hive> select * from employee;
OK
Michael ["Montreal","Toronto"]  ["Male","30"]   {
   "DB":80}       {
   "Product":"Developer\u0004Lead"}
Will    ["Montreal"]    ["Male","35"]   {
   "Perl":85}     {
   "Product":"Lead","Test":"Lead"}
Shelley ["New York"]    ["Female","27"] {
   "Python":80}   {
   "Test":"Lead","COE":"Architect"}
Lucy    ["Vancouver"]   ["Female","57"] {
   "Sales":89}    {
   "Sales":"Lead"}
Time taken: 0.037 seconds, Fetched: 4 row(s)

访问列数据

hive> select name,address[0],personaInfo[0],technol["Sales"] from employee;
OK
Michael Montreal        Male    NULL
Will    Montreal        Male    NULL
Shelley New York        Female  NULL
Lucy    Vancouver       Female  89
Michael 100     Montreal        NULL
Will    101     Montreal        NULL
Steven  102     New York        NULL
Lucy    103     Vancouver       NULL
Mike    104     Montreal        NULL
Shelley 105     New York        NULL
Luly    106     Vancouver       NULL
Lily    107     Montreal        NULL
Shell   108     New York        NULL
Mich    109     Vancouver       NULL
Dayong  110     Montreal        NULL
Sara    111     New York        NULL
Roman   112     Vancouver       NULL
Christine       113     Montreal        NULL
Eman    114     New York        NULL
Alex    115     Vancouver       NULL
Alan    116     Montreal        NULL
Andy    117     New York        NULL
Ryan    118     Vancouver       NULL
Rome    119     Montreal        NULL
Lym     120     New York        NULL
Linm    121     Vancouver       NULL
Dach    122     Montreal        NULL
Ilon    123     New York        NULL
Elaine  124     Vancouver       NULL
Time taken: 0.292 seconds, Fetched: 29 row(s)

修改表结构

将personinfo改成info struct<gender:string,age:int>

hive> alter table employee change personainfo info struct<gender:string,age:int>
    > ;
OK
Time taken: 0.171 seconds

#再次查看
hive> select * from employee;
OK
Michael ["Montreal","Toronto"]  {
   "gender":"Male","age":30}      {
   "DB":80}       {
   "Product":"Developer\u0004Lead"}
Will    ["Montreal"]    {
   "gender":"Male","age":35}      {
   "Perl":85}     {
   "Product":"
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值