Hive使用(3.1.3)

Hive使用(3.1.3)

1.hive shell常用命令

#查看当前所有表
show tables;
#创建分区表,并指定列分隔符为',',行分隔符为'\n',如果备注出现乱码,则修改hive的元数据表TABLE_PARAMS、COLUMNS_V2对应备注字段编码集为utf8即可
create table t1(id int comment '主键',name string comment '名称',favors array<string>,scores map<string,int>,
address struct<home_addr:string,office_addr:string>) comment '测试表'
partitioned by (year int,school string)
row format delimited fields terminated by ';' 
collection items terminated by ','
map keys terminated by ':'
lines terminated by '\n'
stored as textfile;
#创建桶表
create table t2(id int) clustered by (id) into 4 buckets;
#查看表数据
select id,name,favors[0],scores['math'],scores['english'],address.office_addr from t1;
#删除表
drop table t1;
#显示当前所有数据库
show databases;
#选择数据库
use default;
#创建数据库
create database db1;
#创建数据库并指定hdfs路径
create database db2 location '/user/hive/mydb2';
#删除数据库
drop database db2;
#查看表信息
desc t1;
#查看建表语句
show create table t1;
#修改表名
alter table t1 rename to t1_bak;
#加载本地文件到表t1(将数据文件直接上传到对应的表目录下,等同于hdfs -put命令),分区不存在则自动创建
load data local inpath '/home/hive/hivedata/data1.data' into table t1 partition(year=2021,school="cqschool");
#增加表字段
alter table t1 add columns(name string);
#内部表转换为外部表
alter table t1 set tblproperties('EXTERNAL' = 'TRUE');
#添加分区
alter table t1 add partition (year=2021,school="cqschool");
#添加分区并关联数据
alter table t1 add partition (year=2021,school="cqschool") location "/xxx/xxx/xxxx";
#删除分区
alter table t1 drop partition (year=2021,school="cqschool");
#查看分区
show partitions t1;
#1.开启分桶
set hive.enforce.bucketing=true;
#2.写入桶表数据(不能直接用load data,无法分桶)
insert into table t2 select id from t2_source;
#采样,跟当前分桶无关,会重新进行分桶输出,2:将t2中的数据随机分成多少桶,1:取第几桶(从1开始)
select * from t2 tablesample(bucket 1 out of 2 on id);
#创建视图
create view v2 as select * from t2 where id = 8;
#删除视图
drop view v2;

2.hive常用数据类型

类型描述示例
TINYINT1个字节 (8位)有符号整数1
SMALLINT2字节(16位)有符号整数1
INT4字节(32位)有符号整数1
BIGINT8字节(64位)有符号整数1
FLOAT4字节(32位)单精度浮点数1.0
DOUBLE8字节(64位)双精度浮点数1.0
DECIMAL高精度浮点数1.0
TIMESTAMPyyyy-MM-dd HH:MM:SS2017-11-13 12:00:00
DATEyyyy-mm-dd2014-04-03
BOOLEANtrue/falsetrue
STRING字符串”xia”
ARRAYARRAYarray泛型
MAPMAPMAP泛型key value
STRUCTSTRUCTMAP泛型 列名1:数据类型1,列名2:数据类型2

3.hive常用文件格式

  • Text File
    存储为纯文本文件,这是 Hive 默认的文件存储格式,这种存储方式数据不做压缩,磁盘开销大,数据解析开销大;
    一般只有与其他系统由数据交互的接口表采用TEXTFILE 格式,其他事实表和维度表都不建议使用;
  • SequenceFile
    SequenceFile是Hadoop API 提供的一种二进制文件,它将数据以<key,value>的形式序列化到文件中。这种二进制文件内部使用Hadoop 的标准的Writable 接口实现序列化和反序列化。它与Hadoop API中的MapFile 是互相兼容的。Hive 中的SequenceFile 继承自Hadoop API 的SequenceFile,不过它的key为空,使用value 存放实际的值, 这样是为了避免MR 在运行map 阶段的排序过程。
    SequenceFile支持三种压缩选择:NONE, RECORD, BLOCK。 Record压缩率低,一般建议使用BLOCK压缩。 SequenceFile最重要的优点就是Hadoop原生支持较好,有API,但除此之外平平无奇,实际生产中不会使用。
  • RCFile
    RCFile 文件格式是 FaceBook 开源的一种 Hive 的文件存储格式,一种行列存储相结合的存储方式。首先将表分为几个行组,对每个行组内的数据按列存储,每一列的数据都是分开存储。
  • ORC Files
    ORC 是在一定程度上扩展了 RCFile,是对 RCFile 的优化。数据按照行分块,每个块按照列存储,其中每个块都存储有一个索引。hive给出的新格式,属于RCFILE的升级版,性能有大幅度提升,而且数据可以压缩存储,压缩快 快速列存取。
  • Avro Files
    Avro 是一个数据序列化系统,设计用于支持大批量数据交换的应用。它的主要特点有:支持二进制序列化方式,可以便捷,快速地处理大量数据;动态语言友好,Avro 提供的机制使动态语言可以方便地处理 Avro 数据。
  • Parquet
    Parquet也是一种行式存储,同时具有很好的压缩性能;同时可以减少大量的表扫描和反序列化的时间。
    Parquet 是基于 Dremel 的数据模型和算法实现的,面向分析型业务的列式存储格式。它通过按列进行高效压缩和特殊的编码技术,从而在降低存储空间的同时提高了 IO 效率。

总结: 以上压缩格式中 ORC 和 Parquet 的综合性能突出,使用较为广泛,推荐使用这两种格式。指定存储格式,通常在导入ORC 和 Parquet之前先创建Text File临时表,然后通过insert into select来导入到ORC 和 Parquet格式表中;
4.hive表类型

  • 内部表
    hive中的默认表类型,表数据默认存储在warehouse目录中;
    在加载数据的过程中,实际数据会被移动到warehouse目录中;
    删除表时,表中的数据和元数据都将会被同时删除;
  • 外部表
    建表语句中包含External的表叫外部表;
    外部表在加载数据的时候,实际数据并不会移动到warehouse目录中,只是与外部数据建立一个链接(映射关系);
    当删除一个外部表时,只删除元数据,不删除表中的数据,仅删除表和数据之间的链接;
  • 分区表
    分区可以理解为分类,通过分区把不同类型数据放到不同目录;
    分区的标准就是指定分区字段,分区字段可以有一个或多个;
    分区表的意义在于优化查询,查询时尽量利用分区字段,如果不使用分区字段,就会全表扫描(比如凹按天分区);
  • 桶表
    桶表是对数据进行hash取值,然后放到不同文件中存储;
    物理上,每个桶就是表(或分区)里的一个文件;
    桶表的作用主要是数据抽样、提高某些查询效率,比如部分join(当join关联字段是同一个字段hash时,相同id数据在同一个分区);
  • 视图
    使用视图可以降低查询的复杂度;
    5.查看当前用户操作历史
tail -10 ~/.hivehistory

6.hive元信息表描述

表名描述
DBS数据库信息
TBLS表信息
COLUMNS_V2表的列信息
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值