Hive学习笔记(一)

一、Hive简介

Hive是基于HDFS的一个数据仓库,它可以提供hql语句通过解释器映射成MapReduce任务完成提取、转换、加载(ETL)操作

二、Hive架构

在这里插入图片描述

  • CLI,Shell 终端命令行(Command Line Interface),采用交互形式使用 Hive 命令行与 Hive 进行交互
  • JDBC/ODBC,是 Hive 的基于 JDBC 操作提供的客户端
  • 通过浏览器访问 Hive
  • driver,驱动器
    1. 解释器 对用户输入的SQL语言进行词法和语法解析,将SQL语句转化为抽象语法树的形式
    2. 编译器 编译器是将语法树编译为逻辑执行计划
    3. 优化器 优化器是对逻辑执行计划进行优化
    4. 执行器 执行器是调用底层的运行框架执行逻辑执行计划
  • Metastore 表名,列和分区属性(名称,长度,描述等等),表数据所在目录,默认存在Derby 中,不支持多用户,使用MySQL代替

三、Hive相关重要概念

1. 建表语句:

hive> create table user(id int,
    > name string,
    > age int,
    > tele string)
    > ROW FORMAT DELIMITED
    > FIELDS TERMINATED BY '\t'
    > STORED AS TEXTFILE;

导入数据To表:load data local inpath '/home/wyp/data/user.txt' into table user;

从本地文件系统导入数据到Hive,会先复制到HDFS中,再从HDFS将数据导入表中,表的数据默认存在hive-site.xml配置文件的hive.metastore.warehouse.dir属性指向路径中,Hive每创建一个表会在该目录下创建一个文件夹,将数据存在该文件中。

2. 内部表,外部表

外部表建表在表名前面加上external字段即可

删除内部表,如果hadoop垃圾箱没有开启,会删除元数据和表数据,垃圾箱开启只会删除元数据,同时会将表数据移动到Current文件夹下。

删除外部表,会删除元数据,但是不会删除表数据

3. 分区

//创建一个分区表,分区的单位时dt和国家名
hive> create table logs(ts bigint,line string) partitioned by (dt String,country string);

分区是表的部分列的集合,可以为频繁使用的数据建立分区,这样查找分区中的数据时就不需要扫描全表,提高查找效率

Hive的分区使用HDFS的子目录功能实现。每一个子目录包含了分区对应的列名和每一列的值,要估算号分区数量,防止目录创建过多

Hive查询通常使用分区的列作为查询条件

4. 分桶

建表语句带有分桶:

create table student(
id int,
age int,
name string
)
partitioned by (stat_date string)
clustered by (id) sorted by(age) into 2 bucket
row format delimited fields terminated by ',';

桶为了表提供了额外的结构,Hive在处理某些查询时利用这个结构,能给有效地提高查询效率

桶是通过对指定列进行哈希计算来实现的,通过哈希值将一个列名下的数据切分为一组桶,并使每个桶对应于该列名下的一个存储文件

Hive特点

优点:

  • 高扩展性
  • 适合大数据批量操作
  • 延伸性较好,支持自定义函数
  • 良好的容错性

缺点:

  • Hive 不支持记录级别的增删改操作
  • 延时很高
  • 不支持事务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值