hive 分区表、桶表和外部表

1:分区表

图:创建分区表

图:导入数据

图:在HDFS的显示信息

分区字段就是一个文件夹的标识

图:在多列上创建分区

图:导入数据

图:在多列上建立分区后在HDFS上形成的结构信息

把表中的大多数字段建立为分区字段,可行吗?分区不是越多越好,分区越多的话,加载数据的话必须注意分区,那么文件会被控制的非常小,Map的任务数量增多,

计算不一定会快。Hive限定了分区的数量。选用一些查询比较频繁的字段来建立分区,时间字段等。

查询比较频繁,并且不会有很多枚举值的字段,适合作为分区字段。分区字段就是虚拟列(virtual column)。

图:查询结果,其中分区字段显示了出来,但是在数据文件中是不存在的,那么我们称它们为虚拟列。

不合理的地方,比如我们对一个网站的销售日志进行分析,我们根据ip地址的地区进行分区,那么有些地区如京广沪地区的ip会比较多,

造成数据分布的不平衡,有些文件中的数据多,有些文件中的数据少。

2:桶表

对立面的记录做一个hash计算,经过hash运算后,  然后对hash进行取模计算,比如mod 10,那么取模计算后,划分的每份的数据量是差不多的,

模的数据为桶,模10的话,那么就有10个桶,那么各个map进行计算的时间差不多,缺点:用业务字段来查询的话,没有什么效果。

进行表连接的时候查询数据方便;进行抽样查询时比较方便,按照桶表进行抽比较符合要求。

图:创建桶表,并加载数据

图:分完桶后是三个文件

3:外部表

外部表不对应HDFS的文件夹,但是在数据库中能够找到它。把数据表删了不会影响数据。

外部表和分区表用的比较多,用户在上传数据时早已根据某些字段对数据进行了划分。

图:创建外部表并查询

时间: 2024-10-26 23:24:09

hive 分区表、桶表和外部表的相关文章

Hive探秘--内部表、外部表、分区表、桶表研究

Hive知识 一.建表语法 CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] [CLUSTERED BY (col_name, col_name, ...) [SORTE

hive 四种表,分区表,内部,外部表,桶表

Hive四大表类型内部表.外部表.分区表和桶表 一.概述 总体上Hive有四种表:外部表,内部表(管理表),分区表,桶表.分别对应不同的需求.下面主要讲解各种表的适用情形.创建和加载数据方法. 二.具体内容 1.内部表 创建内部表和加载数据 create table emp_inner(   empno int,   ename string,   job string,   mgr int,   hiredate string,   sal double,   comm double,   d

hive表与外部表的区别

相信很多用户都用过关系型数据库,我们可以在关系型数据库里面创建表(create table),这里要讨论的表和关系型数据库中的表在概念上很类似.我们可以用下面的语句在Hive里面创建一个表: hive> create table wyp(id int, > name string, > age int, > tele string) > ROW FORMAT DELIMITED > FIELDS TERMINATED BY '\t' > STORED AS TEX

hive内部表与外部表区别

1.创建内部表与外部表的区别是什么? 2.external关键字的作用是什么? 3.外部表与内部表的区别是什么? 4.删除表的时候,内部表与外部表有什么区别? 5.load data local inpath '/home/wyp/data/wyp.txt' into table wyp;的过程是什么样子的? 6.磁盘,hdfs,hive表他们之间的过程是什么样子的? 相信很多用户都用过关系型数据库,我们可以在关系型数据库里面创建表(create table),这里要讨论的表和关系型数据库中的表

【转】Hive内部表、外部表

hive内部表.外部表区别自不用说,可实际用的时候还是要小心. 1. 内部表: [sql] view plaincopyprint? create table tt (name string , age string) location '/input/table_data'; 此时,会在hdfs上新建一个tt表的数据存放地,例如,笔者是在 hdfs://master/input/table_data 上传hdfs数据到表中: [sql] view plaincopyprint? load da

Hive管理表,外部表及外部分区表的深入探讨

Hive管理表,也叫内部表.Hive控制着管理表的整个生命周期,默认情况下Hive管理表的数据存放在hive的主目录:/user/hive/warehouse/下,并且当我们删除一张表时,这张表的数据也会相应的被删除掉,在文件层面上讲,就是在Hive主目录下的表目录以及目录里面的数据文件都会被删除掉. 管理表能够有效的管理表的数据,但是不利于对数据的分享,同一份数据,我希望既能够指向表A,有能够分享给表B,但是相应的这些表不应该控制数据的生命周期,这种表在Hive里面成为外部表.在创建外部表的时

hive中的表、外部表、分区和桶的理解

一.概念介绍 Hive 没有专门的数据存储格式,也没有为数据建立索引,用户可以非常自由的组织 Hive 中的表,只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据 Hive 中的 Table 和数据库中的 Table 在概念上是类似的,每一个 Table 在 Hive 中都有一个相应的目录存储数据.例如,一个表 pvs,它在 HDFS 中的路径为:/wh/pvs,其中,wh 是在 hive-site.xml 中由 ${hive.metastore.wareh

[hive] hive 内部表和外部表

1.创建内部表 hive (test1)> create table com_inner_person(id int,name string,age int,ctime timestamp) row format delimited fields terminated by ','; OK Time taken: 0.233 seconds hive (test1)> load data local inpath '/opt/hadoop/person.data' into table com

【oracle11g,18】存储结构:临时表,手工条带化,表/索引迁移表空间,删除表,外部表

一. 临时表 临时表放在临时表空间,不生成redo,只有undo. 在临时表中可以创建索引.视图及触发器,还可以使用"Export and Import(导出和导入)"或"Data Pump(数据泵)"导出和导入临时表的定义.但是,即使使用了ROWS 选项,也不会导出数据. 有基于事务(默认)和基于session两种,其他的会话不能访问到. 在临时表中,DML锁永远不需要. 1.创建默认的(基于事务的)临时表:(on commit delete rows:提交时清空