Hive(三)Hive中的表

1038-茹同学

发表文章数:74

热门标签

首页 » 大数据 » 正文

参考文章:
Hive(9) hive的分区表、外部分区表、分桶表

数据都放到哪里了?

既然Hive相当于一个连接数据与MR的接口,那数据都在哪里呢?
答案是存放在HDFS中啦。我们创建的,读取的数据都是从HDFS中来的。

查看我们所有数据所在的位置:通过登录mysql中存储的元数据进行查看。
Hive(三)Hive中的表
从上图可以看到我们之前创建的数据实际存储在下面的HDFS的URL之中。

hdfs://node01:8020/user/hive/warehouse/myhive.db

数据仓库默认位置配置及库表关系

转载自:https://blog.csdn.net/qq_39954916/article/details/105197541

1、原始位置的默认配置

hive中的Default(默认)数据仓库的最原始位置是在hdfs上的 /user/hive/warehouse(以下默认Hive的HDFS根目录为/user/hive)路径下,这个原始位置是本地的/usr/local/hive/conf/hive-default.xml.template文件默认配置的,

2、库表关系

1)默认情况下:

在hdfs目录下,没有对默认的数据库default创建文件夹。如果某张表属于default数据库,直接在数据仓库目录下创建一个文件夹。

下图中abc,bonus,department,dept,emp为缺省库default下的几张表,目录名与表名一致。

2)指定库情况下

如果创建了数据库,并指定表为该库下的表,Hive会在/user/hive/warehouse/下创建一个以库名命名的目录(如上图的a.db,b.db分别代表数据库a,b),该库的表目录在库目录下。

3)制定分区的情况下:

如果为表设定了分区,则会在表目录下增加分区目录,目录名以“分区键名=分区值”的形式命名。如下图,表dept1中,设置了v1和v2两个名为a的分区。

3、修改数据仓库的原始位置只需在hive-site.xml自定义配置文件中设置如下信息即可:

hive.metastore.warehouse.dir 目录 location of default database for the warehouse 需要为该目录配置同组可写:

hdfs dfs -chmod g+w 目录,另外也可以顺便在这个自定义配置文件中设置如下参数

 <property>
   <name>hive.cli.print.header</name>
   <value>true</value>
 </property> 
 <property>
   <name>hive.cli.print.current.db</name>
   <value>true</value>
 </property>

这样每次select返回结果信息就会显示有表头字段名了。

内部表与外部表

内部表

在HIve中创建的表为内部表。

create  table etest (name string , age string);   

外部表

外部表因为是指定其他的hdfs路径的数据加载到表当中来
所以hive表会认为自己不完全独占这份数据,所以删除hive表的时候,数据仍然存放在hdfs当中,不会删掉。
为什么使用?因为,有时候这份数据不仅仅你的团队在用,有可能其它团队也要用,因此为了防止数据被删除,要使用外部表。

创建外部表:

  • 创建外部表的时候需要加上external 关键字
create external table etest (name string , age string);   

分库表与分桶表

分库表

如果hive当中所有的数据都存入到一个文件夹下面,那么在使用MR计算程序的时候,读取一整个目录下面的所有文件来进行计算(全表扫描),就会变得特别慢,因为数据量太大了
实际工作当中一般都是计算前一天的数据,所以我们只需要将前一天的数据挑出来放到一个文件夹下面即可,专门去计算前一天的数据。

这样就可以使用hive当中的分区表,通过分文件夹的形式,将每一天的数据都分成为一个文件夹(位置依然在默认仓库下,但是已经分为不同的文件夹),然后我们计算数据的时候,通过指定前一天的文件夹即可只计算前一天的数据。

在大数据中,最常用的一种思想就是分治,我们可以把大的文件切割划分成一个个的小的文件,这样每次操作一个小的文件就会很容易了,同样的道理,在hive当中也是支持这种思想的,就是我们可以把大的数据,按照每天,或者每小时进行切分成一个个的小的文件,这样去操作小的文件就会容易得多了。

在文件系统上建立文件夹,把表的数据放在不同文件夹下面,加快查询速度。示意图如下:

Hive(三)Hive中的表

分桶表

分区表是为了减少扫描量,提高效率,那分桶表是干嘛的?分桶表的作用也是一样,只不过会进一步会细化而已。

分桶将整个数据内容按照某列属性值去hash值进行区分,具有相同的hash值的结果的数据进入到同一个文件中。

形象比喻:

select * from t1 where id % 4 =0;
select * from t1 where id % 4 =1;
select * from t1 where id % 4 =2;
select * from t1 where id % 4 =3;

Hive(三)Hive中的表
分桶是相对分区进行更细粒度的划分

Hive表或分区表可进一步的分桶

分桶将整个数据内容按照某列取hash值,对桶的个数取模的方式决定该条记录(行)存放在哪个桶当中;具有相同hash值的数据进入到同一个文件中。

Hive(三)Hive中的表

标签:

未经允许不得转载:作者:1038-茹同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《Hive(三)Hive中的表》 发布于2020-11-08

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录