当前位置: 首页 > news >正文

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_infowhere provice_name = '山东省'
) ,
t2 as 
(select *from hdw_dim.dim_city_infowhere 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;

相关文章:

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

目录 Hive的物种表结构特性 一、内部表 建表 使用场景 二、外部表 建表:关键词【EXTERNAL】 场景: 外部表与内部表可互相转换 三、临时表 建表 临时表横向对比​编辑 四、分区表 建表:关键字【PARTITIONED BY】 场景: 五、分桶表 …...

随手写的小程序2 一个nc能控制的程序

小程序源代码 下载: https://download.csdn.net/download/nn_84/88846445?spm1001.2014.3001.5501 请下载 Qt 5.12.12 server.pro : QT gui networkCONFIG c11 console CONFIG - app_bundle# You can make your code fail to compile if it uses deprecated APIs. # In o…...

Android中通过属性动画实现文字轮播效果

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂,风趣幽默",感觉非常有意思,忍不住分享一下给大家。 👉点击跳转到教程 一、创建一个自定义ProvinceView类,具体代码如下 /*** Author: ly* Date: 2024/2/22* D…...

最长的回文串

开始想的简单了&#xff0c;确实没想到奇数字母删去一个后也能用 解法&#xff1a; 桶排序 #include<iostream> #include<vector> #include<algorithm> using namespace std; #define endl \n #define int long long signed main() {int t;cin >> t…...

2023 H1 中国边缘公有云服务市场 Top2,百度智能云加速推动分布式云智能化升级

近期&#xff0c;IDC 发布了《中国边缘云市场跟踪研究 2023 H1》。报告显示&#xff0c;2023 上半年&#xff0c;中国边缘公有云服务市场规模 24.3 亿元&#xff0c;同比增速达到 41.8%。 其中&#xff0c;百度智能云以 15.7% 的市场份额位列中国边缘公有云服务市场第二&#…...

Emlog博客网站快速搭建并结合内网穿透实现远程访问本地站点

文章目录 前言1. 网站搭建1.1 Emolog网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2.Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 3. 公网访问测试总结 前言 博客作为使…...

力扣经典题目解析--旋转图像(字节二面)

题目 原题地址: . - 力扣&#xff08;LeetCode&#xff09; 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1&#xff1…...

【ARMv8M Cortex-M33 系列 8.1 -- RT-Thread 堆内存 检查命令 free 实现及介绍】

文章目录 RT-Thread 堆内存 检查命令 free 实现及介绍rt_memory_info 函数验证 RT-Thread 堆内存 检查命令 free 实现及介绍 在RT-Thread系统中&#xff0c;通常可以通过rt_memory_info函数获取当前的堆内存使用信息&#xff0c;然后你可以包装这个函数来显示剩余的堆空间。rt…...

milvus Delete API流程源码分析

Delete API执行流程源码解析 milvus版本:v2.3.2 整体架构: Delete 的数据流向: 1.客户端sdk发出Delete API请求。 from pymilvus import (connections,Collection, )print("start connecting to Milvus") connections.connect("default", host"192…...

CentOS使用Docker搭建Halo网站并实现无公网ip远程访问

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&…...

【JVM】垃圾回收算法

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;JVM ⛺️稳中求进&#xff0c;晒太阳 垃圾回收算法 Java是如何实现垃圾回收的呢&#xff1f;简单来说&#xff0c;垃圾回收就做两件事 找到内存中存活的对象释放不在存活对象的内存&…...

如何和将原始request的Header中的值传递给openfeign请求的Header? 以及又如何获取openfeign请求中Header中的值

如何和将原始request的Header中的值传递给openfeign请求的Header&#xff1f; 以及又如何获取openfeign请求中Header中的值 如何和将原始request的Header中的值传递给openfeign请求的Header参考 [https://www.jb51.net/article/282522.htm](https://www.jb51.net/article/28252…...

Flink 侧输出流(SideOutput)

&#x1f338;在平时大部分的 DataStream API 的算子的输出是单一输出&#xff0c;也就是某一种或者说某一类数据流&#xff0c;流向相同的地方。 &#x1f338;在处理不同的流中&#xff0c;除了 split 算子&#xff0c;可以将一条流分成多条流&#xff0c;这些流的数据类型也…...

C语言中关于#include的一些小知识

写代码的过程中&#xff0c;因为手误&#xff0c;重复包含了头文件 可以看到没有报错 如果是你自己编写的头文件&#xff0c;那么如果没加唯一包含标识的话&#xff0c;那么编译器会编译报错的。如果是系统自带的头文件&#xff0c;由于其每个头文件都加了特殊标识&#xff0c…...

DSP芯片 机器码下载方法 【主要 “扯” 用Uniflash下载的方法】

还是以德州仪器的TMS320F28335芯片为 “栗子”&#xff0c;说说这事儿。 编制好的程序经过开发环境可以编译成扩展名为 .out 文件&#xff0c;这个文件就是DSP可以运行机器码&#xff0c;我们把这个文件下载到 DSP芯片中的程序区&#xff0c; 下载好了&#xff0c;这个芯片原…...

速盾网络:CDN用几天关了可以吗?安全吗?

在使用CDN&#xff08;内容分发网络&#xff09;时&#xff0c;有时候会考虑暂时关闭或暂停使用CDN服务的情况。但是&#xff0c;对于关闭CDN服务的时间长短以及安全性问题&#xff0c;很多人可能存在疑问。在本文中&#xff0c;我们将讨论CDN使用中关闭几天是否安全以及相关注…...

MR混合现实情景实训教学系统在高空作业课堂中的应用

高空作业是一项高风险的工作&#xff0c;对于从业者来说&#xff0c;不仅需要具备专业的技能&#xff0c;还需要有丰富的实践经验。然而&#xff0c;传统的课堂教学往往只能通过理论讲解和模拟训练来传授知识&#xff0c;无法提供真实的实践环境。而MR混合现实情景实训教学系统…...

Windows系统中定时执行python脚本

背景&#xff1a;本地Windows系统指定目录下会有文件的修改新增&#xff0c;这些变化的文件需要定时的被上传到git仓库中&#xff0c;这样不需要每次变更手动上传了。 首先编写一个检测文件夹下文件变化并且上传git仓库的python脚本(确保你已经在E:\edc_workspace\data_edc_et…...

HashMap 源码学习-jdk1.8

1、一些常量的定义 这里针对MIN_TREEIFY_CAPACITY 这个值进行解释一下。 java8里面&#xff0c;HashMap 的数据结构是数组 &#xff08;链表或者红黑树&#xff09;&#xff0c;每个数组节点下可能会存在链表和红黑树之间的转换&#xff0c;当同一个索引下面的节点超过8个时…...

WebStorm 2023:让您更接近理想的开发环境 mac/win版

JetBrains WebStorm 2023激活版下载是一款强大而智能的Web开发工具&#xff0c;专为提高开发人员的生产力而设计。这款编辑器提供了许多先进的代码编辑功能&#xff0c;以及一系列实用的工具和插件&#xff0c;可帮助您更快地编写、调试和测试代码。 WebStorm 2023软件获取 We…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...