欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

hive查看一张表的分区字段_Hive表分区与索引

发布时间:2024/1/8 编程问答 43 豆豆
生活随笔 收集整理的这篇文章主要介绍了 hive查看一张表的分区字段_Hive表分区与索引 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

hive表分区

表分区是指将数据按照物理分层的方式进行区分开,加快查询的速度,同时也起到数据快照的作用!

创建分区表的关键字:partitioned by ,可以指定单个字段也可以指定多个字段;

partitioned by (dt String,country string);

create table pt_test(ts bigint,line string)

partitioned by (dt String,country string);

往分区表插入数据:

load data local inpath '/root/hive/partitions/file1' into table pt_test partition (dt='2001-01-01',country='GB’);

动态分区不能使用load加载数据,需要使用insert into

hive静态分区和动态分区

hive支持两种类型的分区:静态分区和动态分区

静态分区与动态分区的主要区别在于静态分区是手动指定,而动态分区是通过数据来进行判断。详细来说,静态分区的列实在编译时期,通过用户传递来决定的;动态分区只有在 SQL 执行时才能决定

默认创建的分区是静态分区,如果要指定动态分区可以通过以下配置:

查看表分区:

show partitions tbl;

如果要配置动态分区修改以下两个配置:

set hive.exec.dynamic.partition=true;

set hive.exec.dynamic.partition.mode=nonstrict;

hive分桶

当单个分区或者表中的数据量越来越大,当分区不能更细粒的划分数据时,采用分桶技术将数据更细粒度的划分和管理。

分桶关键字:BUCKET

指定分桶的字段:clustered by (uid)

创建一个分桶表:

create table if not exists bucket(

uid int,

uname string,

uage int

)

clustered by (uid) into 4 buckets

row format delimited

fields terminated by ‘,’

加载数据:

load data local inpath '/usr/local/hive/test/3.txt' into table buc1 ;

分桶查询测试:

select * from buc1 cluster by (uid) ;

分桶表的查询:

查询全部

select * from buc3;

select * from buc3 tablesample(bucket 1 out of 1)

查询第几个桶数据

select * from buc3 tablesample(bucket 1 out of 4 on uid); //除4余0

select * from buc3 tablesample(bucket 1 out of 2 on uid);

tablesample(bucket x out of y on uid)

x:代表从第几桶开始查询

y:查询的总桶数,y可以是总的桶数的倍数或者因子;x不能大于y

分区与分桶:

1、分区使用的是表外字段,分桶使用的是表内字段

2、分桶是更细粒度的划分、管理数据,更多用来做数据抽样、JOIN操作

3、分区是粗粒度的将数据隔离,分桶是更加细粒度的将数据隔离

hive视图

1、视图是一个虚表,一个逻辑概念,可以概括出多张数据表

表是物理概念,数据放在表中,视图是虚表,操作视图和操作表是一样的,只不过视图下面不存储具体的数据

视图在创建时候,只是保存了一份元数据,当查询视图的时候,才开始执行视图对应的 那些子查询

2、视图是建立在已有表的基础上,视图赖以建立的这些表称为基表

3、视图可以简化复杂的查询

4、视图只能查询,不能 Load/Insert/Update/Delete 数据;

create view 视图表名 as select 基表1.字段1,基表1.字段2,基表2.字段1 ...... from 库名1.表名 库名2.表名 where 基表1.字段=基表2.字段

在mysql或者oracle中,视图是具体的存储数据的,一般称之为物化,物化之后对于一些复杂的查询查询可以提升效率

视图是只读的,只允许修改元数据中的tblproperties属性信息

hive视图的一些查询语句:

show views;

desc view_cdt;

查询视图

select * from view ;

删除视图:

drop view view_cdt;

hive索引

Hive从0.7.0版本开始加入了索引,目的是提高Hive表指定列的查询速度。没有索引的时候,Hive在执行查询时需要加载整个表或者整个分区,然后处理所有的数据,但当在指定列上存在索引,再通过指定列查询时,那么只会加载和处理部分文件

索引是一种以空间换取时间的方式

hive索引的原理:

Hive的索引其实是一张索引表(Hive的物理表),在表里面存储索引列的值,该值对应的HDFS的文件路径,该值在数据文件中的偏移量。

当Hive通过索引列执行查询时,首先通过一个MR Job去查询索引表,根据索引列的过滤条件,查询出该索引列值对应的HDFS文件目录及偏移量,并且把这些数据输出到HDFS的一个文件中,然后再根据这个文件中去筛选原文件,作为查询Job的输入。

hive索引的好处:

可以避免全表扫描和资源浪费

可以加快含有group by的语句的查询速度

hive索引的语法

创建索引,未加载数据

create index test_index on table test(id)

as 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler'

with deferred rebuild

in table test;

生成索引数据

alter index test_index on test rebuild;

hive索引的一些缺点:

使用过程繁琐

需要额外的Job去扫描表,时间较长

数据更新,索引不会自动更新,需要手动进行更新

希望本文对你有帮助!

感谢关注“码农星球”。本文版权属于“码农星球”。我们提供咨询和培训服务,关于本文有任何困惑,请关注并联系我们。

总结

以上是生活随笔为你收集整理的hive查看一张表的分区字段_Hive表分区与索引的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。