hive基础

hive是什么?

一个关系数据库,一个建立在hadoop之上的数据仓库架构,他们提供了一种类似sql的语句Hive Sql 简称hql,hive会将我们写的hql解析为hadoop支持的map reduce程序并将这个map reduce交给hadoop集群来处理。
hive的存储是建立在hadoop文件系统之上的,简单的说hive中的一个表就是我们设置的数据仓库的一个文件夹,你导入的数据就是这个文件夹下的文件,表的一个分区对应表下的一个目录。

hive的架构

这里写图片描述

表,外部表,分区,桶

hive本身没有专门的数据存储格式。hive 主要包含4种数据类型 表,外部表,分区,桶。
:可以简单的理解为一个文件夹,表的结构存储在元数据中,表的数据存储在文件中。
外部表:表的数据不在hdfs系统中而在外部。

表和外部表的区别
1:创建的语句不同,外部表要加入关键字external和location
2 : 内部表是创建在你设置的数据仓库中,外部表是创建在其他文件夹,如果没有指定location他会创建在数据仓库的一个子文件夹中
3: 在导入数据到外部表时数据没有移动到数据仓库的目录下。
4:在删除表是会删除表的元数据和表的数据,但是外部表只会删除完数据,数据并不会被删除。

分区:分区重形式上可以理解为文件夹,想想在一个网站如果每天都有几百万条log日志。利用分区,我们可以把每天的日志放在一个文件夹下。
在创建表时加入分区

 create table bucketed_user(id int,name string) clustered by (id) sorted by(name) into 4 buckets row format delimited fields terminated by ',' stored as textfile partitioned by (eid int)

根据分区导入数据

load data local inpath '/opt/hive-2.1.1/sample.txt' overwrite into table usersl partition (eid='1201')  

这样在数据库所在的文件夹中将加入一个文件夹名字为eid=’1201’,数据在这个文件夹下。

这里写图片描述


桶是比表和区颗粒度更小的,每个桶对应一个文件,根据某一列进行hash运算,对应hash值为0的写入00000_0对应hash值为1的写入00001_0分成几个桶就有几个文件
如果你把文件放再一个表中查询时将进行全局扫描,有了桶的出现可以对数据进行抽样检查。

创建带桶的table

 create table bucketed_user(id int,name string) clustered by (id) sorted by(name) into 4 buckets row format delimited fields terminated by ',' stored as textfile

向桶中插入数据

insert overwrite table bucketed_user select * from users;

这样在bucketed_user这个文件夹下将多出几个文件。

这里写图片描述

bucketed_user中的数据

这里写图片描述

hive常用命令

 show databases             查看所有数据库
 use 数据库名               (默认在default数据库下)   切换数据库  
 show tables               查看所有的表
 describe  表名             查看表的结构 
 truncate table 表名        删除表中的所有数据 
 create database 数据库名   创建数据库
 DROP SCHEMA 数据库名       删除数据库 
 .创建table 
 create table if not exists usersl(eid int,name String,salary String,destignation String) 
    COMMENT 'User details' ROW FORMAT DELIMITED   --下面这个是注释
    FIELDS TERMINATED BY '\t'  --字段终止符
    LINES TERMINATED BY '\n'   --行终止符
    STORED AS TEXTFILE         --文本保存的格式
插入数据
    insert没有用。可以用load命令或者sqoop导入数据
    导入语句
    在本地导入
    load data local inpath '/hive/warehouse/sample.txt' overwrite into table usersl
    在hdfs导入
    load data  inpath 'hdfs://localhost:9000/hive/warehouse/sample.txt' overwrite into table usersl


DROP TABLE IF EXISTS 表名    删除表

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值