hive杂谈

数据仓库是一个面向主题的、集成的、非易失的、随时间变化的,用来支持管理人员决策的数据集合,数据仓库中包含了粒度化的企业数据。

数据仓库的主要特征是:主题性、集成性、非易失性、时变性。

数据仓库的体系结构通常包含4个层次:数据源、数据存储和管理、数据服务以及数据应用。
在这里插入图片描述

  • 数据源:数据仓库的数据来源,包括外部数据、现有业务系统和文档资料等。
  • 数据存储和管理:为数据提供的存储和管理,包括数据仓库、数据集市、数据仓库监视、运行与维护工具和元数据管理等。
  • 数据服务:为前端工具和应用提供数据服务,包括直接从数据仓库中获取数据提供给前端使用,或者通过OLAP服务器为前端应用提供更为复杂的数据服务。
  • 数据应用:直接面向最终用户,包括数据工具、自由报表工具、数据分析工具、数据挖掘工具和各类应用系统。

1.概述

Hive是建立在Hadoop之上的一种数仓工具。该工具的功能是将结构化、半结构化的数据文件映射为一张数据库表,基于数据库表,提供了一种类似SQL的查询模型(HQL),用于访问和分析存储在Hadoop文件中的大型数据集。
  Hive本身并不具备存储功能,其核心是将HQL转换为MapReduce程序,然后将程序提交到Hadoop集群中执行。

2.数据模型

①库
  MySQL中默认数据库是default,用户可以创建不同的database,在database下也可以创建不同的表。Hive也可以分为不同的数据(仓)库,和传统数据库保持一致。在传统数仓中创建database。默认的数据库也是default。Hive中的库相当于关系数据库中的命名空间,它的作用是将用户和数据库的表进行隔离。

②表
  Hive中的表所对应的数据是存储在HDFS中,而表相关的元数据是存储在关系数据库中。Hive中的表分为内部表和外部表两种类型,两者的区别在于数据的访问和删除:
内部表的加载数据和创建表的过程是分开的,在加载数据时,实际数据会被移动到数仓目录中,之后对数据的访问是在数仓目录实现。而外部表加载数据和创建表是同一个过程,对数据的访问是读取HDFS中的数据;
内部表删除时,因为数据移动到了数仓目录中,因此删除表时,表中数据和元数据会被同时删除。外部表因为数据还在HDFS中,删除表时并不影响数据。
创建表时不做任何指定,默认创建的就是内部表。想要创建外部表,则需要使用External进行修饰

③分区
  分区是一个优化的手段,目的是减少全表扫描,提高查询效率。在Hive中存储的方式就是表的主目录文件夹下的子文件夹,子文件夹的名字表示所定义的分区列名字。
④分桶
  分桶和分区的区别在于:分桶是针对数据文件本身进行拆分,根据表中字段(例如,编号ID)的值,经过hash计算规则,将数据文件划分成指定的若干个小文件。分桶后,HDFS中的数据文件会变为多个小文件。分桶的优点是优化join查询和方便抽样查询。

3.HQL的执行
Hive在执行一条HQL语句时,会经过以下步骤:

  1. 语法解析:Antlr定义SQL的语法规则,完成SQL词法,语法解析,将SQL转化为抽象语法树AST Tree;
  2. 语义解析:遍历AST Tree,抽象出查询的基本组成单元QueryBlock;
  3. 生成逻辑执行计划:遍历QueryBlock,翻译为执行操作树OperatorTree;
  4. 优化逻辑执行计划:逻辑层优化器进行OperatorTree变换,合并不必要的ReduceSinkOperator,减少shuffle数据量;
  5. 生成物理执行计划:遍历OperatorTree,翻译为MapReduce任务;
  6. 优化物理执行计划:物理层优化器进行MapReduce任务的变换,生成最终的执行计划。

参考:

https://datawhalechina.github.io/juicy-bigdata/#/ch07-Hive?id=_702-%e6%95%b0%e6%8d%ae%e4%bb%93%e5%ba%93%e6%a6%82%e5%bf%b5

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

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

相关文章

(数据结构)顺序表的定义

#include<stdio.h> //顺序表的实现——静态分配 #define MAX 10 //定义最大长度 typedef struct List {int data[MAX]; //用静态的数组存放数据int lenth; //顺序表现在的长度 }List; //顺序表的初始化 void ChuShiHua(List L) {L.lenth 0; //将顺序表的长度初始化…

NAS非接入层协议学习(二)

在无线通信网络中 NAS (Non-Access Stratum)做为非接入层是演进分组系统(或5G核心网)中的一组协议。NAS用于在用户设备(UE)和移动管理实体(MME/AMF)之间传送非无线电信令&#xff0c;以实现NR/LTE/E-UTRAN接入。 NAS在协议栈中是控制面的最高层。 NAS协议分组中可以将其分为两…

『Confetti 喜庆散花插件の使用』

以下用 VUE3 语法 举例使用&#xff1a; npm install js-confetti<script setup lang"ts"> import JSConfetti from js-confetticonst confetti new JSConfetti()function showConfetti() {confetti.addConfetti() } </script><template><h1 …

“BMP转PNG一键转换,批量处理图片,迈入高效图片管理新时代“

你是否曾经为了转换图片格式而烦恼&#xff1f;是否曾经因为一张一张地手动转换而感到无奈&#xff1f;现在&#xff0c;我们的全新工具将为你解决这些问题&#xff0c;开启高效图片管理新时代&#xff01; 首先&#xff0c;我们进入首助编辑高手主页面&#xff0c;会看到有多种…

人力资源管理后台 === 首页+部署

目录 1.首页-echarts图表的应用 2.首页-echarts图表的按需导入 3.路由模式-将路由改成history模式 4. 打包分析-分析 5.CDN加速 6.项目打包-安装nginx 7.mac/windows环境下nginx部署启动项目 8.nginx解决history的404问题 9.nginx配置代理解决生产环境跨域问题 1.首页-…

分享一个鬼~

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 先看效果&#xff1a; 上源码&#xff1a; import GUI from "https://cdn.jsdelivr.net/npm/lil-gui0.18.2/esm"const canv…

C/C++内存管理,malloc,realloc,calloc,new,delete详解!!!

1.初步了解内存中各个区间存储的数据特征 1.栈区&#xff1a;存储一些局部变量、函数参数、返回值等&#xff0c;跟函数栈振有关&#xff0c;出了作用域&#xff0c;生命周期结束。 2.堆区&#xff1a;用于动态开辟空间&#xff0c;如果不主动销毁空间&#xff0c;则程序运行结…

Centos Bind安装与排错

1.配置Centos系统静态IP vi/etc/sysconfig/network-scripts/ifcfg-ens33BOOTPROTOstaticIPADDR192.168.1.100NETMASK255.255.255.0GATEWAY192.168.1.1DNS18.8.8.8:wqsudo systemctl restart network.service 2.安装BIND&#xff08;需要服务器连接互联网&#xff0c;如果服务…

手把手教你实现一个循环队列(C语言)

这是一道leetcode关于队列的经典题&#xff1a; 622. 设计循环队列https://leetcode.cn/problems/design-circular-queue/ 思路&#xff1a; 大家注意这个题目要求&#xff0c;这个队列是定长的&#xff0c;如果满了则不能再添加数据。那么我们设计一个队头front和队尾rear&…

激光雷达SLAM(一)------初始激光雷达SLAM

专栏目的及认识激光雷达SLAM 一、专栏目的二、初始激光雷达SLAM1、激光雷达SLAM算法相关知识点2、SLAM常见问题[^2]3、激光雷达SLAM的需求点4、RTK在SLAM中的作用5、激光雷达视觉紧耦合图优化滤波紧耦合 一、专栏目的 大家好&#xff01;介绍一下博主自己&#xff0c;感知算法工…

职场份子钱随不随?这20个真相你需要知道!

职场份子钱随不随&#xff1f;这20个真相你需要知道&#xff01; 1.千万不要在老婆面前夸小姨子水灵。 2.盖世功劳&#xff0c;当不得一个矜字&#xff1b;弥天罪过&#xff0c;当不得一个悔字。 3.愚蠢的人永远只会根据答案判断难度。 4.改变自己的是神&#xff0c;企图改…

数据库基础教程之数据库的创建(一)

双击打开Navicat&#xff0c;点击&#xff1a;文件-》新建连接-》PostgreSQL 在下图新建连接中输入各参数&#xff0c;然后点击&#xff1a;连接测试&#xff0c;连接成功后再点击确定。 点击新建数据库 数据库设置如下&#xff1a;

51代码审计-PHP框架MVC类上传断点调试

知识点1&#xff0c;文件上传漏洞挖掘 搜索关键字$_FILES phpmvc架构 MVC模式&#xff08;Model-View-Controller&#xff09;是软件工程中的一种软件架构模式。 MVC把软件系统分为三个基本部分&#xff1a;模型&#xff08;Model&#xff09;、视图&#xff08;View&#…

2024年最新最全的Jmeter接口测试必会技能:jmeter对图片验证码的处理

jmeter对图片验证码的处理 在web端的登录接口经常会有图片验证码的输入&#xff0c;而且每次登录时图片验证码都是随机的&#xff1b;当通过jmeter做接口登录的时候要对图片验证码进行识别出图片中的字段&#xff0c;然后再登录接口中使用&#xff1b; 通过jmeter对图片验证码…

LeetCode.203移除链表元素(原链表操作、虚拟头结点)

LeetCode.203移除链表元素 1.问题描述2.解题思路3.代码 1.问题描述 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val …

保护模式进阶

本系列文章只做个人学习记录使用 参考资料&#xff1a; 《操作系统真象还原》 从0到-1写一个操作系统 获取物理内存容量 计算机要想被使用&#xff0c;就必须先管理&#xff0c;我们想和物理内存打交道&#xff0c;就必须先知道物理内存有多大 linux获取内存的方法 在linux…

C语言做一个恶作剧关机程序

一、项目介绍 C语言实现一个简单的"流氓软件"&#xff0c;一个可以强制关机恶作剧关机程序&#xff0c;输入指定指令可以解除 二、运行截图 然后当你输入“n”才可以解锁关机。 三、完整源码 #include <stdlib.h> #include <stdio.h> #include <s…

【挑战业余一周拿证】一、亚马逊云科技简介 - 第 2 节 - 模块 简介

CSDN 官方中文视频&#xff08;免费&#xff09;&#xff1a;点击进入 第 2 节 - 模块 1 简介 这门课程将为您提供需要了解的所有重要信息&#xff0c;让您能够轻松讨论亚马逊云科技并了解它为 何对您的企业有利 亚马逊云科技为每个企业都提供了非常广泛的服务&#xff0c;从…

【Linux】信号

Linux 信号 1.信号介绍2.core dump3.发送信号3.1.kill3.2.send3.3.abort 4.信号产生4.1.软件条件产生信号4.1.1.SIGPIPE4.1.2.SIGALRM 4.2.硬件异常产生信号 5.信号处理6.可重入函数 & volatile7.SIGCHLD 1.信号介绍 信号本质是一种通知机制。 而进程要处理信号&#xff0…

Docker Swarm总结+基础、集群搭建维护、安全以及集群容灾(1/4)

博主介绍&#xff1a;Java领域优质创作者,博客之星城市赛道TOP20、专注于前端流行技术框架、Java后端技术领域、项目实战运维以及GIS地理信息领域。 &#x1f345;文末获取源码下载地址&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb;…