Hive【内部表、外部表、临时表、分区表、分桶表】【总结】

目录

Hive的物种表结构特性

 一、内部表

建表

使用场景

 二、外部表

建表:关键词【EXTERNAL】

场景:

外部表与内部表可互相转换

 三、临时表

建表

 临时表横向对比​编辑

四、分区表

建表:关键字【PARTITIONED BY】

场景:

五、分桶表

背景

建表

 分区表和分桶表结合使用

Hive的物种表结构特性

  1. 内部表:当删除内部表时,HDFS上的数据以及元数据都会被删除;
  2. 外部表:当删除外部表时,HDFS上的数据不会被删除,但是元数据会被删除;
  3. 临时表:在当前会话期间存在,会话结束时自动消失;
  4. 分区表:将一批数据按照一定的字段或者关键字为多个目录进行存储;
  5. 分桶表:将一批数据按照指定好的字段和桶的数量,对指定字段的数据取模运算,分成不同的桶进行存储,方便随机取样以及join等操作。

 一、内部表

建表

--方式一:正式建表
CREATE TABLE `hdw_dim.dim_city_info_df`(
     city_id            STRING COMMENT  '城市id' 
    ,city_name          STRING COMMENT  '城市名称' 
    ,provice_id         STRING COMMENT  '省份id' 
    ,provice_name       STRING COMMENT  '省份名称'
)
COMMENT '城市信息维表'
PARTITIONED BY ( 
     `pdate`      STRING COMMENT  '天分区'
)
STORED AS orc
TBLPROPERTIES (
    'creator'='210XXXXX', 
    'orc.compress'='SNAPPY',
    'ttl' = '30'
);
--方式二:仿照现有的表建表
create table hdw_dim.dim_city_info_tmp like hdw_dim.dim_city_info_df;
--方式三:根据查询结果自动创建表并且插入数据
create table dw_dim.dim_city_info_tmp1 as dw_dim.dim_city_info_tmp

使用场景

  1. ETL数据清理时用内部表做中间表,清理时HDFS上的文件同步删除;
  2. 在误删的情况下,数据易回溯,用内部表;
  3. 统计分析时,不涉及数据共享数据的情况;
  4. 需要对元数据和表数据进行管理时。

 二、外部表

建表:关键词【EXTERNAL】

CREATE EXTERNAL TABLE `hdw_dim.dim_city_info_df`(
     city_id            STRING COMMENT  '城市id' 
    ,city_name          STRING COMMENT  '城市名称' 
    ,provice_id         STRING COMMENT  '省份id' 
    ,provice_name       STRING COMMENT  '省份名称'
)
COMMENT '城市信息维表'
PARTITIONED BY ( 
     `pdate`      STRING COMMENT  '天分区'
)
STORED AS orc
TBLPROPERTIES (
    'creator'='210XXXXX', 
    'orc.compress'='SNAPPY',
    'ttl' = '30'
);

场景:

  • 建议在ods层使用外部表
  1. 外部表不会加载数据到Hive的默认仓库,减少数据的传输,同时还能和其他外部表共享数据;
  2. 使用外部表,Hive不会修改源数据,不用担心数据损坏或者丢失;
  3. Hive在删除外部表时,删除的只是表结构,而不会删除数据;
  • 在对于恢复巫山数据有困难的情况,比如:实时采集的数据;

外部表与内部表可互相转换

--查看表类型
desc formatted address

--将内部表修改为外部表
alter table address set tblproperties('EXTERNAL' = 'TRUE');

--将外部表修改为内部表
alter table address set tblproperties('EXTERNAL' = 'FALSE');

 三、临时表

建表

--方式一:TEMPORARY
create temporary table `hdw_dim.dim_city_info`(
     city_id            STRING COMMENT  '城市id' 
    ,city_name          STRING COMMENT  '城市名称' 
    ,provice_id         STRING COMMENT  '省份id' 
    ,provice_name       STRING COMMENT  '省份名称'
)
COMMENT '城市信息维表'
--方式二:with as
with t1 as 
(
    select 
        *
    from hdw_dim.dim_city_info
    where provice_name = '山东省'
) ,
t2 as 
(
    select 
        *
    from hdw_dim.dim_city_info
    where provice_name = '北京市'
)
--方式三:真实建表,用完手动删除
create table hdw_tmp.tmp_city_info as 
select 
    * 
from hdw_dim.dim_city_info;
drop table if exists hdw_tmp.tmp_city_info

 临时表横向对比

四、分区表

分区是HDFS上表目录的子目录,数据按照分区存储在子目录中。如果查询的where子句中包含分区条件,则直接从该分区查找,而不是扫描整个目录,合理的分区可以极大的提高查询速度和性能。

建表:关键字【PARTITIONED BY】

CREATE EXTERNAL TABLE emp_partition
(    
empno INT,    
ename STRING,    
job STRING,    
mgr INT,    
hiredate TIMESTAMP,    
sal DECIMAL(7,2),    
comm DECIMAL(7,2)    
)    
PARTITIONED BY (deptno INT)   -- 按照部门编号进行分区    
ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t"    
LOCATION '/hive/emp_partition';

场景:

在数据仓库管理大规模数据集的时候都需要进行分区,比如将日志文件按天进行分区,从而保证数据细粒度的划分,使得查询性能得到提升。

查看分区目录

hadoop fs -ls  hdfs://hadoop001:8020/hive/emp_partition/

五、分桶表

背景

分区提供了一个隔离数据和优化查询的可行性方案,但是并非所有的数据集都可以形成合理的分区,分区的数量也不是越多越好,过多的分区条件可能导致很多分区上没有数据。同时hive会限制动态分区可以创建最大的分区数,用来避免过多的文件对文件系统产生负担。

        鉴于以上原因,Hive还提供了一种更细粒度的数据拆分方案:分桶表(bucket Table)。分桶表会将指定的列的值进行哈希散列,并对bucket(桶数量)取余,然后存储到对应的bucket中。

建表

CREATE EXTERNAL TABLE emp_bucket
(    
empno INT,    
ename STRING,    
job STRING,    
mgr INT,    
hiredate TIMESTAMP,    
sal DECIMAL(7,2),    
comm DECIMAL(7,2),    
deptno INT
)    
CLUSTERED BY(empno) 
SORTED BY(empno ASC) INTO 4 BUCKETS  --按照员工编号散列到四个 bucket 中   
ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t"    
LOCATION '/hive/emp_bucket';

 分区表和分桶表结合使用

分区表和分桶表的本质都是将数据按照不同粒度进行拆分,从而使得在查询的时候不必扫描全表,只需要扫描对应的分区或分桶,从而提升查询的效率。两者可以结合使用,从而保证数据在不同粒度上都能得到合理的拆分,官方示例如下:

CREATE TABLE page_view_bucketed
(    
viewTime INT,     
userid BIGINT,    
page_url STRING,     
referrer_url STRING,    
ip STRING 
) 
PARTITIONED BY(dt STRING) 
CLUSTERED BY(userid) 
SORTED BY(viewTime) INTO 32 BUCKETS ROW FORMAT DELIMITED   
FIELDS TERMINATED BY '\001'   
COLLECTION ITEMS TERMINATED BY '\002'   
MAP KEYS TERMINATED BY '\003' 
STORED AS SEQUENCEFILE;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/403502.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pip安装依赖环境出现的问题

一、error: subprocess-exited-with-error! 1、前期一直百度的错误如标题所示,得到的方案如下:(但没解决问题) (1)升级setuptools库,或者降低固定版本 //升级setuptools库,或者降低…

Spark之【基础介绍】

Spark最初是由美国伯克利大学AMP实验室在2009年开发,Spark时基于内存计算的大数据并行计算框架,可以用于构建大型的、低延迟的数据分析应用程序。 Spark是当今大数据领域最活跃、最热门、最高效的大数据通用计算平台之一。 Spark的特点 运行速度快 &am…

L2 清点代码库----PTA(疑问)

上图转自新浪微博:“阿里代码库有几亿行代码,但其中有很多功能重复的代码,比如单单快排就被重写了几百遍。请设计一个程序,能够将代码库中所有功能重复的代码找出。各位大佬有啥想法,我当时就懵了,然后就挂…

用Python插入页码到PDF文档

页码是许多类型文件中的重要内容,它能方便读者在文档中的导航。在创建PDF文档时,添加页码对于组织和引用内容特别有用。在本文中,我们将探讨如何利用Python程序高效地插入页码到PDF文档中,简化工作流程并创建出精美、结构合理的PD…

【selenium】执行 Javascript 脚本 滚动、元素的特殊操作等

某些特殊情况下,使用selenium的api无法操作页面元素,点击、滚动实现的某些功能,可以考虑通过执行js来完成。 为什么不用js写自动化?——selenium第一版是js写的,但js兼容性存在问题,所以引入webdriver 现在…

Vue 中 onclick和@click区别

文章目录 一、直接上结论二、验证代码&#xff0c;可直接运行三、点击结果 一、直接上结论 onclick 只能触发 js的原生方法&#xff0c;不能触发vue的封装方法click 只能触发vue的封装方法&#xff0c;不能触发js的原生方法 二、验证代码&#xff0c;可直接运行 <!DOCTYP…

LiveNVR监控流媒体Onvif/RTSP功能-支持Ehome转GB28181协议isup转GB28181支持海康摄像头海康NVR通过协议ISUP协议接入

LiveNVR支持Ehome转GB28181协议isup转GB28181支持海康摄像头海康NVR通过协议ISUP协议接入 1、海康 ISUP 接入配置2、海康设备接入2.1、海康EHOME接入配置示例2.2、海康ISUP接入配置示例 3、通道配置3.1、直播流接入类型 海康ISUP3.2、海康 ISUP 设备ID3.3、启用保存3.4、接入成…

yolov5 车牌识别(C#\C++\Python三合一)

本系列给大伙分享一个博主自己利用yolov5实现的一种车牌识别算法&#xff0c;训练样本都是博主自己手动拍照收集的&#xff0c;所以样本数量并不是很完整&#xff0c;目前主要实现的功能就针对绿牌车和蓝牌车的车牌识别&#xff0c;除了能识别出车牌字符外&#xff0c;还能区别…

利用Ubuntu22.04启动U盘对电脑磁盘进行格式化

概要&#xff1a; 本篇演示利用Ubuntu22.04启动U盘的Try Ubuntu模式对电脑磁盘进行格式化 一、说明 1、电脑 笔者的电脑品牌是acer(宏碁/宏基) 开机按F2进入BIOS 开机按F12进入Boot Manager 2、Ubuntu22.04启动U盘 制作方法参考笔者的文章&#xff1a; Ubuntu制作Ubun…

Microsoft的PromptBench可以做啥?

目录 PromptBench简介 PromptBench的快速模型性能评估 PromptBench数据集介绍 PromptBench模型介绍 PromptBench模型加载遇到的问题 第一次在M1 Mac上加载模型 vicuna和llama系列模型 PromptBench各个模型加载情况总结 PromptBench的Prompt快速工程 chain of thought…

C++ 文件操作-文本文件-读取和打开文件方法详解

读文件步骤 #include <iostream> using namespace std; #include <fstream> #include <string> //文本文件 读文件void test(){// 1 包含头文件// 2 创建流对象ifstream ifs;// 3 打开文件 并且判断是否打开成功ifs.open("table.txt",ios::in); //…

开源博客项目Blog .NET Core源码学习(9:Autofac使用浅析)

开源博客项目Blog使用Autofac注册并管理组件和服务&#xff0c;Autofac是面向.net 的开源IOC容器&#xff0c;支持通过接口、实例、程序集等方式注册组件和服务&#xff0c;同时支持属性注入、方法注入等注入方式。本文学习并记录Blog项目中Autofac的使用方式。   整个Blog解…

Window部署SkyWalking

SkyWalking mysql的驱动依赖 选择下载版本 v9.4 现在后解压缩目录结构 一、修改config目录文件 application.yml 修改1&#xff1a; selector: ${SW_STORAGE:h2} 修改后&#xff1a; selector: ${SW_STORAGE:mysql} 修改2&#xff1a;使用mysql数据库 mysql: properti…

【前端素材】推荐优质后台管理系统GramOs平台模板(附源码)

一、需求分析 后台管理系统是一种用于管理网站、应用程序或系统的工具&#xff0c;它通常作为一个独立的后台界面存在&#xff0c;供管理员或特定用户使用。下面详细分析后台管理系统的定义和功能&#xff1a; 1. 定义 后台管理系统是一个用于管理和控制网站、应用程序或系统…

Eureka注册中心(黑马学习笔记)

Eureka注册中心 假如我们的服务提供者user-service部署了多个实例&#xff0c;如图&#xff1a; 大家思考几个问题&#xff1a; order-service在发起远程调用的时候&#xff0c;该如何得知user-service实例的ip地址和端口&#xff1f; 有多个user-service实例地址&#xff0c…

java数据结构与算法刷题-----LeetCode404. 左叶子之和

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 解题思路 深度优先遍历&#xff0c;或者广度优先向下遍历时&#xff0c;如…

大数据揭秘:Hadoop短视频流量分析实战

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

2024 Sora来了!“手机Agent智能体”也来了!

近日&#xff0c;Open AI发布了能够根据文本生成超现实视频的工具Sora&#xff0c;多款震撼视频引爆科技圈刷屏&#xff0c;热度持续发酵占据AI领域话题中心&#xff0c;被认为是AGI实现过程里的重大里程碑事件。新一轮的人工智能浪潮给人类未来的生产和生活方式带来巨大而深远…

【Kotlin】流程控制

1 选择结构 Kotlin 中选择结构主要包含 if -else、when 语句&#xff0c;并且可以返回结果。 1.1 if-else 1.1. 条件选择 fun main() {var score 85if (score > 90) {println("优秀")} else if (score > 80) {println("良好")} else if (score &…