我是靠谱客的博主 可靠钢笔,最近开发中收集的这篇文章主要介绍【学习历程】16 Hive的四种表模型,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

    • 一、内部表与外部表
      • 1.1 内部表与外部表的区别
      • 1.2 内部表与外部表的使用时机
    • 二、分区表与分桶表
      • 2.1 分区表
      • 2.2 分桶表

一、内部表与外部表

1.1 内部表与外部表的区别

1、建表语法的区别

  • 外部表在创建的时候需要加上external关键字

2、删除表之后的区别

  • 内部表删除后,表的元数据和真实数据都被删除了
  • 外部表删除后,仅仅只是把该表的元数据删除了,真实数据还在,后期还是可以恢复出来

1.2 内部表与外部表的使用时机

  • 内部表由于删除表的时候会同步删除HDFS的数据文件,所以确定如果一个表仅仅是你独占使用,其他人不使用的时候就可以创建内部表,如果一个表的文件数据,其他人也要使用,那么就创建外部表
  • 一般外部表都是用在数据仓库的ODS层
  • 内部表都是用在数据仓库的DW层

二、分区表与分桶表

2.1 分区表

1、原理与创建语句

      在大数据中,最常用的一种思想就是分治,我们可以把大的文件切割划分成一个个的小的文件,这样每次操作一个小的文件就会很容易了,同样的道理,在hive当中也是支持这种思想的,就是我们可以把大的数据,按照每天,或者每小时进行切分成一个个的小的文件,这样去操作小的文件就会容易得多了。
在这里插入图片描述
创建分区表语法:
增加partitioned by,如下:

create table score(s_id string, c_id string, s_score int) partitioned by (month string) row format delimited fields terminated by 't';

2、静态分区和动态分区

  • 静态分区
    表的分区字段的值需要开发人员手动给定,如同上面的建表语句。
  • 动态分区
    按照需求实现把数据自动导入到表的不同分区中,不需要手动指定
    要想进行动态分区,需要设置参数:
set hive.exec.dynamic.partition=true; #开启动态分区功能
set hive.exec.dynamic.partition.mode=nonstrict; #设置hive为非严格模式

2.2 分桶表

在这里插入图片描述
1、分桶表原理

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

2、作用

  • 取样sampling更高效。没有分桶的话需要扫描整个数据集。
  • 提升某些查询操作效率,例如map side join

3、创建分桶表

    在创建分桶表之前要执行一下命令:

  • set hive.enforce.bucketing=true; 开启对分桶表的支持
  • set mapreduce.job.reduces=4; 设置与桶相同的reduce个数(默认只有一个reduce)

最后

以上就是可靠钢笔为你收集整理的【学习历程】16 Hive的四种表模型的全部内容,希望文章能够帮你解决【学习历程】16 Hive的四种表模型所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部