• hive分桶分区表和内部外部表


    分桶表和分区表

    分区表:

    是指按照数据表的某列或某些列分为多个区,这些列不是表中的字段(一般为日期或系统),分区的数量不确定,分区从形式上可以理解为文件夹

    分桶表:

    分桶是相对分区进行更细粒度的划分。分桶将整个数据内容按照某列属性值的hash值进行区分,列是表中的字段,如要按照name属性分为3个桶,就是对name属性值的hash值对3取摸,按照取模结果对数据分桶。如取模结果为0的数据记录存放到一个文件,取模为1的数据存放到一个文件,取模为2的数据存放到一个文件,桶的数量是固定的。

    俩者的区别:

    (1)从表现形式上:
    分区表是一个目录,分桶表是文件

    (2)从创建语句上:
    分区表使用partitioned by 子句指定,以指定字段为伪列,需要指定字段类型
    分桶表由clustered by 子句指定,指定字段为真实字段,需要指定桶的个数

    (3)从数量上:
    分区表的分区个数可以增长,分桶表一旦指定,不能再增长

    (4)从作用上:
    分区避免全表扫描,根据分区列查询指定目录提高查询速度
    分桶保存分桶查询结果的分桶结构(数据已经按照分桶字段进行了hash散列)。
    分桶表数据进行抽样和JOIN时可以提高MR程序效率(引擎做计算的时候,就可以一个分桶一个分桶的做,需要的内存就会少很多,join的效率就提高了)

    注意:可以对数据表分区之后继续分桶

    内部表&外部表

    定义:

    未被external修饰的是内部表(managed table),被external修饰的为外部表(external table);

    区别:

    • 内部表数据由Hive自身管理,外部表数据由HDFS管理;
    • 内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse),外部表数据的存储位置由自己制定(如果没有LOCATION,Hive将在HDFS上的/user/hive/warehouse文件夹下以外部表的表名创建一个文件夹,并将属于这个表的数据存放在这里);
    • 删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;
    • 对内部表的修改会将修改直接同步给元数据,而对外部表的表结构和分区进行修改,则需要修复
  • 相关阅读:
    日语
    vue3入门
    三分钟快速了解什么是MES系统
    Three.js
    雾天行人车辆检测
    Google Earth Engine(GEE)——10分钟短文快速了解地球引擎和森林面积损失计算
    认识O(NlogN)的排序
    Django中重写model_to_dict方法,兼容接口返回展示时间和外键的
    触控笔和pencil笔一样吗?平价电容笔推荐
    「python」关于sympy的使用笔记
  • 原文地址:https://blog.csdn.net/qq_42456324/article/details/126808550