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

news2024/9/22 17:32:47

目录

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;

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ssm+springmvc基于springboot的宠物领养系统的设计与实现_j5fk4

宠物领养系统主要是为了提高管理员的工作效率,满足管理员对更方便、更快、更好地存储所有信息和数据检索功能的要求。通过对多个类似网站的合理分析,确定了宠物领养系统的各个模块。考虑到用户的可操作性,经过深入调查研究,遵循系…

django rest framework 学习笔记-实战商城2

01收货地址模型类和视图定义_哔哩哔哩_bilibili 本博客借鉴至大佬的视频学习笔记 地址信息的管理:增删改查的实现 # 序列化器配置 class AddrSerializer(serializers.ModelSerializer):"""收货地址的模型序列化器"""class Meta:mo…

NXP实战笔记(六):S32K3xx基于RTD-SDK在S32DS上配置PWM发波

目录 1、概述 2、SDK配置 2.1、Port配置 2.2、Emios_Mcl_Ip 2.3、Emios_Pwm 2.4、代码示例 1、概述 针对S32K3xx芯片,产生PWM的硬件支持单元仅有两个,分别是eMiosx与Flexio. 生成PWM的顺序,按照单片机所用资源进行初始化执行如下 初始化…

ELK入门(四)-logstash

Logstash Logstash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的存储库中。 Logstash 能够动态地采集、转换和传输数据,不受格式或复杂度的影响。利用 Grok 从非结构化数据中…

Kotlin基础 7

1.apply函数详解 1.1. DSL /*** 为什么要传入扩展函数(泛型),而不是一个普通的匿名函数* T.()->Unit* 扩展函数里自带了接收者对象的this隐式调用* 为什么是泛型的扩展函数?* 因为是由this 隐式调用 this 类型就是泛型类型, 相当于this的扩展函数,…

短剧小程序开发,重塑视频观看体验的科技革命

随着科技的飞速发展,人们的娱乐方式也在不断变化。短剧小程序作为新兴的数字娱乐形式,以其独特的魅力和巨大的市场潜力,正逐渐成为科技与娱乐结合的代表。本文将探讨短剧小程序的发展背景、优势特点、开发流程以及未来展望。 一、短剧小程序…

MySQL数据库集群技术主从复制 一主一从详细讲解

集群技术 集群概述 MySQL复制技术 集群目的 负载均衡 解决高并发 高可用HA 服务可用性 远程灾备 数据有效性 类型 一主一从 一主双从 双主双从 原理 概念 在主库上把数据更改(DDL DML DCL)记录到二进制日志(Binary Log)中…

RISC-V知识总结 —— 指令集

资源1: RISC-V China – RISC-V International 资源2: RISC-V International – RISC-V: The Open Standard RISC Instruction Set Architecture 资源3: RV32I, RV64I Instructions — riscv-isa-pages documentation 1. 指令集架构的类型 在讨论RISC-V或任何处理器架构时&…

Code Release Process

Code Control Process-CSDN博客 代码发布流程(Code Release Process)

Java毕业设计-基于ssm的校园二手交易管理系统-第67期

获取源码资料,请移步从戎源码网:从戎源码网_专业的计算机毕业设计网站 项目介绍 基于ssm的校园二手交易管理系统:前端jsp、jquery,后端 springmvc、spring、mybatis,集成商品管理、订单管理、销售管理、采购管理、购…

vue.js el-tooltip根据文字长度控制是否提示toolTip

一、需求&#xff1a;如何判断当前文本文字是否超出文本长度&#xff0c;是否需要出现提示toolTip。效果图如下&#xff1a; 二、实现&#xff1a; 1、表格字段鼠标放置el-popover出现 “引用主题” 的具体内容&#xff1b; <!-- 表格字段&#xff1a;引用主题 --> <…

Azuki NFT 概览与数据分析

作者&#xff1a;stellafootprint.network 编译&#xff1a;cicifootprint.network 数据源&#xff1a;Azuki NFT Collection Dashboard Azuki NFT 将动漫艺术与实用性相结合&#xff0c;培育了一个充满活力的 Web3 社区。 这个 NFT 项目会在 2024 年崛起吗&#xff1f; …

数字化转型导师坚鹏:政府数字化转型之数字建设、发展与创新

政府数字化转型之数字基础设施建设、发展与创新 课程背景&#xff1a; 数字化背景下&#xff0c;很多政府存在以下问题&#xff1a; 不清楚数字基础设施建设现状&#xff1f; 不清楚数字基础设施发展趋势&#xff1f; 不清楚数字基础设施创新案例&#xff1f; 课程特色…

《优化接口设计的思路》系列:第八篇—分页接口的设计和优化

系列文章导航 第一篇—接口参数的一些弯弯绕绕 第二篇—接口用户上下文的设计与实现 第三篇—留下用户调用接口的痕迹 第四篇—接口的权限控制 第五篇—接口发生异常如何统一处理 第六篇—接口防抖(防重复提交)的一些方式 第七篇—接口限流策略 第八篇—分页接口的设计和优化 …

LeetCode刷题计划----day5

19 力扣链接&#xff1a;https://leetcode.cn/problems/squares-of-a-sorted-array/description/ 文章讲解链接&#xff1a;https://programmercarl.com/0977.%E6%9C%89%E5%BA%8F%E6%95%B0%E7%BB%84%E7%9A%84%E5%B9%B3%E6%96%B9.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8…

奇怪的需求之与图片做交互

1.起因 客户想要展示自己的地图,该地图上有各种工作数据,和工作点位,已有的地图不能满足需求.于是提出将这张图片当成大背景 2.经过 鉴于文件格式和尺寸的原因,协商后客户提出将图片做成缩放效果,同时具有点击效果,原先直接进入的主页,现在为点击图片中的某条线路进入主页面…

WordPres Bricks Builder 前台RCE漏洞复现(CVE-2024-25600)

0x01 产品简介 Bricks Builder是一款用于WordPress的开发主题,提供直观的拖放界面,用于设计和构建WordPress网站。它使用户能够轻松创建自定义的网页布局和设计,无需编写或了解复杂的代码。Bricks Builder具有用户友好的界面和强大的功能,使用户可以通过简单的拖放操作添加…

【力扣hot100】刷题笔记Day9

前言 阴天睡得还挺舒服&#xff0c;9点半才醒&#xff0c;用刷题开启美好新一天&#xff01; 141. 环形链表 - 力扣&#xff08;LeetCode&#xff09; 哈希表 class Solution:def hasCycle(self, head: Optional[ListNode]) -> bool:seen set() # 哈希集合# seen {} #…

Web前端3D JS框架和库 整理

在WebGL库和SVG/Canvas元素的支持下&#xff0c;JavaScript变得惊人的强大。几乎可以为网络构建任何东西&#xff0c;包括基于浏览器的游戏和本地应用&#xff0c;许多最新的突破性功能都在3D上运行。 为此&#xff0c;「数维图小编」整理了19个交互式3D Javascript库和框架&am…

龙年加密行业能否迎来发展春天?行业大咖带你探秘投资风口

在过去数年里&#xff0c;加密行业的牛熊市转换&#xff0c;时刻牵动着行业人士的心。无论是初入加密行业的开发新人&#xff0c;还是金融行业经验拉满的投资大佬&#xff0c;都在变动不居的环境下探寻着适应行业发展、捕捉创新机遇的方向。这一过程中&#xff0c;如何专注项目…