❤️Hive的基本知识(二)Hive中的各种表❤️

简介: ❤️Hive的基本知识(二)Hive中的各种表❤️

🌹内部表:

内部表也称为被Hive拥有和管理的托管表(Managed table)。默认情况下创建的表就是内部表,Hive拥有该表的结构和文件。换句话说,Hive完全管理表(元数据和数据)的生命周期,类似于RDBMS中的表。当您删除内部表时,它会删除数据以及表的元数据。

🌹外部表:

外部表中的数据不是Hive拥有或管理的,只管理表元数据的生命周期。要创建一个外部表,需要使用EXTERNAL语法关键字。删除外部表只会删除元数据,而不会删除实际数据。在Hive外部仍然可以访问

实际数据。

内部表、外部表差异:

无论内部表还是外部表,Hive都在Hive Metastore中管理表定义及其分区信息。删除内部表会从

Metastore中删除表元数据,还会从HDFS中删除其所有数据/文件。删除外部表,只会从Metastore中删

除表的元数据,并保持HDFS位置中的实际数据不变。

🌹分区表:

当Hive表对应的数据量大、文件多时,为了避免查询时全表扫描数据,Hive支持根据用户指定的字段进

行分区,分区的字段可以是日期、地域、种类等具有标识意义的字段,分区字段不能是表中已经存在的字段,分区表的关键字为PARTITIONED BY

静态分区:指的是分区的字段值是由用户在加载数据的时候手动指定的

语法如下:

动态分区:指的是分区的字段值是基于查询结果自动推断出来的

启用hive动态分区,需要在hive会话中设置两个参数:

set hive.exec.dynamic.partition=true; //开启动态分区功能
set hive.exec.dynamic.partition.mode=nonstrict;//指定动态分区的模式,分为nonstick非严格模式和strict严格模式,strict严格模式要求至少有一个分区为静态分区。

核心语法就是insert+select

创建一张新的分区表t_all_hero_part_dynamic

load data [local] inpath ' ' into table tablename partition(分区字段='分区 
值'...); 
create table t_all_hero_part_dynamic( 
id int, 
name string, 
hp_max int, 
mp_max int, 
attack_max int, 
defense_max int, 
attack_range string, 
role_main string, 
role_assist string 
) partitioned by (role string) 
row format delimited 
fields terminated by "\t";执行动态分区插入

分区表的注意事项:

一、 分区表不是建表的必要语法规则,是一种优化手段表,可选;

二、 分区字段不能是表中已有的字段,不能重复;

三、 分区字段是虚拟字段,其数据并不存储在底层的文件中;

四、 分区字段值的确定来自于用户价值数据手动指定(静态分区)或者根据查询结果位置自动推断

动态分区

五、 Hive支持多重分区,也就是说在分区的基础上继续分区,划分更加细粒度

🌹分桶表:

分桶表也叫做桶表,源自建表语法中bucket单词。是一种用于优化查询而设计的表类型。该功能可以让

数据分解为若干个部分易于管理

语法:

其中CLUSTERED BY (col_name)表示根据哪个字段进行分;INTO N BUCKETS表示分为几桶(也就是几

个部分)。需要注意的是,分桶的字段必须是表中已经存在的字段。

开启分桶的功能 ,从Hive2.0开始不再需要设置:

分桶表的使用好处:

1、 基于分桶字段查询时,减少全表扫描

2、 JOIN时可以提高MR程序效率,减少笛卡尔积数量

3、 分桶表数据进行抽样


目录
相关文章
|
1月前
|
SQL 存储 HIVE
Hive中的表是如何定义的?请解释表的结构和数据类型。
Hive中的表是如何定义的?请解释表的结构和数据类型。
57 0
|
1月前
|
SQL 消息中间件 数据处理
DataX读取Hive Orc格式表丢失数据处理记录
DataX读取Hive Orc格式表丢失数据处理记录
159 0
|
7月前
|
SQL HIVE
49 Hive修改表
49 Hive修改表
22 0
49 Hive修改表
|
30天前
|
SQL 关系型数据库 MySQL
Hive 表注释乱码解决
Hive元数据在MySQL默认使用`latin1`字符集导致注释乱码。可通过修改MySQL配置文件`/etc/my.cnf`,在`[mysqld]`和末尾添加`character-set-server=utf8`等设置,重启MySQL。然后在Hive数据库中调整表字段、分区字段、索引注释的字符集。注意,这仅对新表生效。测试创建带注释的Hive表,问题解决。
|
1月前
|
SQL HIVE
Hive表删除数据不支持使用Delete From...
Hive表删除数据不支持使用Delete From...
27 0
|
1月前
|
SQL 存储 分布式计算
【Hive】hive内部表和外部表的区别
【4月更文挑战第14天】【Hive】hive内部表和外部表的区别
|
1月前
|
SQL 存储 分布式计算
❤️Hive的基本知识(一)❤️
❤️Hive的基本知识(一)❤️
34 0
|
1月前
|
SQL 存储 分布式计算
Hive【基础 01】核心概念+体系架构+数据类型+内容格式+存储格式+内外部表(部分图片来源于网络)
【4月更文挑战第6天】Hive【基础 01】核心概念+体系架构+数据类型+内容格式+存储格式+内外部表(部分图片来源于网络)
50 1
|
1月前
|
SQL 数据库 HIVE
Hive【基础知识 05】常用DDL操作(数据库操作+创建表+修改表+清空删除表+其他命令)
【4月更文挑战第8天】Hive【基础知识 05】常用DDL操作(数据库操作+创建表+修改表+清空删除表+其他命令)
39 0
|
1月前
|
SQL 消息中间件 Kafka
Flink部署问题之hive表没有数据如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。