Hive入门

Hive是一个基于Hadoop的数据仓库工具,提供类似SQL的查询方式处理结构化数据。它将HQL转换为MapReduce任务,简化数据分析。Hive包括CLI、JDBC/ODBC接口、Thrift服务层、解释器、元数据存储等组件。Hive与关系型数据库相比,具有数据类型、表类型(内部表和外部表)、数据加载、分区和分桶等特点,用于优化查询效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hive

定义:Hive是一个基于Hadoop的数据仓库工具,可以将结构化的数据文件映射成一张数据表,并可以提供类似SQL的方式来对数据文件进行读写以及管理,这套Hive SQL简称为HQL,Hive的引擎可以是MR,Spark,Tez

本质:Hive的本质是将HQL转换成MapReduce任务,完成整个数据的分析查询,减少编写MapReduce的复杂度

优点:

1.学习成本低
2.海量数据分析
3.可扩展性
4.延展性
5.良好的容错性
6.统计管理

缺点:

1.Hive的HQL表达能力有限
2.迭代式算法无法表达
3.Hive的效率比较低
4.Hive自动生成的MapReduce作业,通常情况下不够智能化
5.Hive调优比较困难,力度较粗

Hive的架构:

Hive的用户连接接口层:CLI(Command Line Interface)最常用,JDBC/ODBC,WebUI

Hive的服务层(thriftserver):hive的可选组件,此组件是一个软件服务框架,允许客户端使用包括Java,C++等其它语言通过编程的方式远程访问Hive

Hive将元数据存储在数据库中,连接到这些数据库(mysql,derby)的模式分三种:单用户模式,多用户模式,远程服务器模式
元数据包括Database,表名,表的列及类型,存储空间,分区,表数据,所在目录等

Hive的解释器(驱动Driver):完成HQL的查询语句的词法分析,语法分析,编译,优化,以及查询计划的生成,生成的查询计划存储在HDFS中,并由MapReduce调用执行

Hive的元数据:Hive的元数据存储在数据库中,如mysql,derby,Hive中的元数据包括(表名,表所属的数据库名,表的拥有者,列/分区字段,表的类型(是否外部表),表的数据所在的目录)

Hive与关系型数据库的比较:

比较项 关系数据库 Hive
ANSI SQL 支持 不完全支持
更新 Update,insert,delete insert,override into table
事务 支持 支持(部分支持)
模式 写模式 读模式
存储位置 块设备,本地文件系统 HDFS
延时
多表插入 不支持 支持
子查询 完全支持 只能用在from子句中
视图 updatable read-only
可扩展性
数据规模
实时响应 毫秒级 秒级

数据库基本操作:

1.规则语法:

1.1注释语法

-- 单行注释
// 单行注释
/*
*	多行注释
*/

1.2大小写规则:

1.Hive的数据库名,表名都不区分大小写
2.建议关键字大写

1.3命名规则:

1.名字不能使用数字开头
2.不能使用关键字
3.尽量不使用特殊符号
4.如果表比较多,那么表名和字段名可以定义规则加上前缀

Hive中的数据类型:

分类 类型 描述 字面量实例
基本数据类型 boolean true/false true
TINYINT 1字节的有符号整数(-128-127) 1Y
SMALLINT 2个字节的有符号整数 1S
INT 4字节 1
BIGINT 8字节 1L
FLOAT 4字节小数型 1.0
DOUBLE 8字节小数型 1.0
重要 STRING 字符串 “a”
VARCHAR 变长字符串 “a”
CHAR 固定长度字符串 “a”
BINARY 字节数组 无法表示
DATE 日期 ‘2016-03-29’
TIMESTAMP 时间戳 122355126365655
//创建库
create database mydb;
create dababase if not exists zoo comment 'this is a database of qianfeng';

//切换数据库
use mydb;

//查看数据库信息
desc database mydb;
desc database extended mydb;//查看数据库的扩展信息

//删除数据库
drop database mydb;//这只能删除空库
drop database mydb cascade;//强制删除

创建库的本质:在hive的warehouse下面的目录下创建一个目录(库名.db命名的目录)
创建表的本质:在对应的库目录下创建一个以表名命名的目录
//创建表
create table t_user(id int,name string);
create table mydb.t_user(id int,name string);
create table if not exists t_user(
uname string comment 'this is name',
chinese int,
math int,
english int
)
comment 'this is my table'
row format delimited
fields terminated by '\t'
lines terminated by '\n'
stored as textfile
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值