一. 从Hive开始

1. 怎么理解Hive

Hive不能理解成一个传统意义上的数据库,应该理解成一个解决方案。
是Hadoop在hdfs和mapreduce之后才出现的一个结构化数据处理的解决方案。
Hdfs解决了大数据的存储问题,mapreduce解决了数据的计算问题。
一切似乎很美好。
但是使用成本太高

SQL语言的发明使得,数据处理的门槛减低了很多。
Hive就是为了用户使用sql来处理数据

总结,大数据背景下,hdfs看起来想一个无限大的存储空间,mapreduce的思想充分利用所有的cpu和内存。Hive使得用户可以像单机时代一样,用sql来处理数据。

概念回顾: SQL(Structured Query Language),也就是结构化的查询语言。
所以hive中的一个核心模块就是metastore, 用来存储结构化的信息,也就是“数据的数据”,其实也是借用了传统文件系统的“metaData”(元数据)的概念。
一般会存有多少列,每一列是什么样的数据结构这样的数据。
然后hive的执行引擎会将sql进行语法分析,生成语法树,然后生成mapreduce程序,进行数据的计算工作。

2. Hive背景知识

了解hive之前要了解HDFS,mapReduce的概念

HDFS:分布式文件系统
说白了也是一层中间件,不用自己筛选服务器磁盘,且有备份容错机制

MapReduce:分布式计算引擎(鼻祖)
分治:每一个计算器只计算小部分的
规约:将小部分的计算结果再次联合
这就是mapReduce的灵魂

Hive是在前两者之后出现的,而在这之前处理大数据都是用的mapReduce自己进行编程。
但是这样的做法效率太低,人们还是更加习惯使用sql来处理数据

最初的hive就仅仅是提供了一个sql转成mapReduce的解释器

传统的数据库:数据的存储和数据引擎是一体的。
Hive:存储和引擎分离

Hive特点如下:

  • 1.将存储到HDFS的数据给套上一层表结构。
  • 2.然后请分布式计算引擎来帮忙写入和查询(mapReduce,Tez,Spark)。
  • 3.Hive自己仅仅是维护了一个metastore服务和hiveServer服务,前者提供数据的表结构关系,后者对外提供查询和写入的接口。
  • 4.Hive存储数据的数据结构是可选的:txt、orc等,除txt外都是列式存储,而传统的数据库都是行式存储。
  • 5.没有索引或者粗粒度的索引

实时计算And离线计算:
实时计算是指对输入数据进行近乎即时的处理和分析,以获取当前状态或预测未来趋势。这种计算方式要求系统能够在数据产生后立即进行处理,并将结果迅速反馈给相关系统或用户。实时计算通常用于需要高时效性和高准确性的场景

离线计算则是指对数据进行非实时、批量式的处理和分析。这种计算方式通常用于对历史数据进行深度挖掘和分析,以发现数据中的模式和趋势,为业务决策提供支持。离线计算不需要即时性,但要求计算结果的准确性和全面性。

3. HQL之DQL

Select
From
Where :可以使用hive支持的任何函数和运算符,但聚合函数除外
Group by:select字段要么是group by分组的字段,要么是被聚合函数应用的字段,聚合函数的本质就是多进一出。
Having:where是没有办法和聚合函数一起使用的,having子句可以让我们筛选分组后		的数据,having中可以使用聚合函数
Order by:全局排序,强烈建议limit和order by一起使用,避免行数过大,如果设置		了hive.mapred.mode为strict时,使用不带limit的order by会有异常。
Limit:用于限制select返回的行数,只给一个参数,代表最大行数,给两个参数代表与		第一行的偏移量。
  • 用union注意:
    如果要将order by、sort by、cluster by、distribute by、limit用于单个select中,需要括号,例如:
    在这里插入图片描述
    如果要应用于整个union查询,要放在最后一个之后
    在这里插入图片描述

  • CTE表达式
    With 假名 as (select子查询)
    Select *
    From 假名
    其实就是引导定义,支持链式
    With q1 as (select子查询)
    Q2 as (select子查询)
    Select *
    From (使用q1和q2)

  • 内连接
    Inner join 或者 join 或者 直接不写
    两个表的交集

  • 左外连接
    Outer可以省略
    左表全右表可能不全,而且右边可以为null

  • 全外连接
    Outer可以省略
    两边都可以为null,就是并集,两边都全并且去重
    就相当于左右外连接同时使用

  • 左半开连接
    Left semi join
    但是结果只会返回左边的字段,并且得到交集,也就是不允许右边为null
    效果上等于内连接后,只取左边的字段

  • 算术运算符
    除并取整 div
    除并取余 %
    位与运算 & : 全真才真
    位或 | : 全假才假
    位异或 ^ : 不等为1
    位取反 ~

  • 逻辑运算符
    And
    Or
    Not 或者 !
    In
    Not in
    Exists : 注意是决定主查询是否得以保留
    在这里插入图片描述

3.1 Hive函数分两大类

内置函数
用户自定义函数

  • 内置函数
    数值类型函数
    日期类型函数
    字符串类型函数
    Concat(str1, str2)
    Concat(分隔符,str|数组)
    Substr(str,start)不是从0是从1开始,负数就是倒着数开始,直到最后
    Substr(str,2,2)从2开始并长度为2
    正则表达式替换函数
    Regexp_replace(str1,正则表达式,str2)
    Parse_url()
    Split()
    集合函数
    条件函数
    If (1=2, 100, 200) : true为100, false为200
    When case 1=1 then XXX
    Else
    End as 假名
    数据脱敏函数

  • 用户自定义函数:根据输入输出的行数
    UDF: 普通函数,一进一出
    UDAF : 聚合函数,多进一出
    Count
    Avg
    Min
    Max
    多维分析
    Grouping_sets
    Cube
    Rollup
    UDTF: 表生成函数,一进多出
    Explode()
    Array或者map
    限制: 只查询源数据表没有问题,只查询explode爆炸的表也没有问题,但是不能都返回
    所以hive专门提供了侧视图的语法,专门用来搭配explode这样的UDTF函数
    其实就是源join爆炸

  • 侧视图
    Lateral view XXX()as 假名
    是一种特殊的语法,主要搭配UDTF类型函数一起使用,用于解决UDTF函数的限制(也即是爆炸的虚表没有和原表进行连接)

  • 开窗函数
    窗口函数
    OLAP函数
    特点: 输入值是从select语句的结果集中的一行或者多行的“窗口”中获取的。
    关键字:over
    最常见的,分组聚合总是会屏蔽很多细节
    在这里插入图片描述所以窗口函数的存在使得分组聚合过程中的细节被保留
    其中sum比较特殊,有四种不同的用法
    在这里插入图片描述
    还有适合用来top业务的三个
    在这里插入图片描述

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

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

相关文章

微信小程序页面制作——个人信息

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

探索fastFM:Python中的高效推荐系统库

文章目录 🚀 探索fastFM:Python中的高效推荐系统库背景:为何选择fastFM?快照:fastFM是什么?安装指南:如何将fastFM加入你的项目?快速入门:五个基础函数的使用实战演练&am…

PWA(Progressive Web App,渐进式网络应用)

PWA(Progressive Web App,渐进式网络应用)是一种结合了 Web 和原生应用程序最佳特性的现代 Web 应用程序开发方法。PWA 旨在提供类似原生应用的用户体验,同时保持 Web 应用的灵活性和可访问性。 PWA 的主要特性: 渐进…

【音视频】播放音视频时发生了什么? 视频的编解码 H264是什么? MP4是什么?

目录 ✨播放一个视频的流程✨为什么要编码(压缩)视频数据?✨如何编码(压缩)数据🎄简单的例子🎄音视频编码方式🎄视频编码格式H264编码是什么?发展历程?H.264基…

ES6+ 特性,箭头函数、解构赋值、模块导入

1. 箭头函数(Arrow Functions) 箭头函数是 ES6 引入的一种简洁的函数定义方式。它的语法更简洁,并且不会绑定自己的 this 值。箭头函数通常用于简化函数表达式。 基本语法: const add (a, b) > a b;特点: 简洁…

解锁 macOS 剪贴板历史记录,高效复制、粘贴技巧

在Mac上,我们经常需要在不同文档之间复制和粘贴内容。然而,macOS自带的剪贴板只能保存最后一个复制项,这大大限制了我们的工作效率。幸运的是,一些第三方应用程序可以帮助我们查看和管理剪贴板的历史记录,从而提升我们…

关系的规范化与范式详解

在数据库设计中,关系的规范化是确保数据结构合理性、减少冗余和异常的关键步骤。如果你是一个数据库设计的初学者,这篇文章将为你深入浅出地讲解 关系规范化 和 范式 的核心概念,并通过简洁的示例帮助你加深理解。 关系的规范化:…

Android Manifest 权限描述大全对照表

115工具网(115工具网-一个提供高效、实用、方便的在线工具集合网站)提供Android Manifest 权限描述大全对照表,可以方便andriod开发者查看安卓权限描述功能 权限名称描述android.permission.ACCESS_CHECKIN_PROPERTIES访问登记属性读取或写入…

飞机制造5G智能工厂数字孪生工业物联平台,推进制造业数字化转型

飞机制造行业作为高端制造业的典范,正积极探索数字化转型的新路径。飞机制造5G智能工厂数字孪生工业物联平台(以下简称“平台”)的兴起,不仅为飞机制造业注入了强劲动力,更为整个制造业的数字化转型树立了新的标杆。 …

微知-BIOS中的XHCI模式是什么意思?(usb3.0的扩展控制器影响usb3.0速率等选项)

XHCI “eXtensible Host Controller Interface” “可扩展主机控制器接口”。 英特尔公司开发的一个USB主机控制器接口,主要面向USB 3.0,同时也支持USB 2.0及以下版本的设备。 是usb3.0的核心部分。 有他表示主机支持usb3.0 三种模式:Smart …

B: 小球反弹

目录 一: 二: 三: 四: 一:问题描述 有一长方形,长为343720 单位长度,宽为233333 单位长度。在其内部左上角顶点有一小球(无视其体积),其初速度如图所示且…

Spring Boot项目中怎么构建多模块的应用

在大型项目开发中,将项目分解为多个模块不仅可以增强代码的可维护性,还能提高开发效率。Spring Boot 提供了对多模块项目的良好支持,使得我们可以轻松地构建复杂的企业级应用程序。在这篇文章中,我们将深入探讨如何在Spring Boot项…

【Rust练习】12.枚举

练习题来自:https://practice-zh.course.rs/compound-types/enum.html 1 // 修复错误 enum Number {Zero,One,Two, }enum Number1 {Zero 0,One,Two, }// C语言风格的枚举定义 enum Number2 {Zero 0.0,One 1.0,Two 2.0, }fn main() {// 通过 as 可以将枚举值强转…

使用FFmpeg的AVFilter转换YUV到RGB

AVFilter 是 FFmpeg 库 libavfilter 的核心组件,提供了一套强大的音视频处理框架,用于对音视频流进行复杂的过滤、转换和效果处理。通过 AVFilter,开发者可以构建自定义的滤镜图(filter graph),实现各种音视…

(每日一问)操作系统:常见的 Linux 指令详解

(每日一问)操作系统:常见的 Linux 指令详解 Linux 系统作为一种开源的操作系统,以其高效、稳定和安全的特性,广泛应用于服务器、开发环境和嵌入式系统等领域。日常使用 Linux,掌握常见的基本指令至关重要&a…

Transformer预测 | 基于Transformer心率时间序列预测(tensorflow)

效果一览 基本介绍 Transformer预测 | 基于Transformer心率时间序列预测(tensorflow) 程序设计 import pandas as pd from pandas.plotting import lag_plot from statsmodels.graphics

EP1 banner海报swiper轮播器

文件路径&#xff1a; E:/homework/uniappv3tswallpaper/pages/index/index.vue <template><view class"homeLayout"><view class"banner"><swiper :indicator-dots"true" :autoplay"true" :interval"3000…

变量数据类型 Day3

1. 变量 1.1 变量的概念 变量是计算机内存中的一块存储单元&#xff0c;是存储数据的基本单元变量的组成包括&#xff1a;数据类型、变量名、值&#xff0c;后文会具体描述变量的本质作用就是去记录数据的&#xff0c;比如说记录一个人的身高、体重、年龄&#xff0c;就需要去…

script中的src

<script src"http://www.somewhere.com/afile.js"></script> 浏览器在解析这个资源时&#xff0c;会向 src 属性指定的路径发送一个 GET 请求&#xff0c;以取得相应资源&#xff0c;假定 是一个 JavaScript 文件。这个初始的请求不受浏览器同源策略限…

Verilog基础,原码,反码与补码的概念

Verilog模块初认识 1、Verilog模块(Module) Verilog中的module可以看成一个具有输入输出端口的黑盒子&#xff0c;该黑盒子有输入和输出接口(信号)&#xff0c;通过把输入在盒子中执行某些操作来实现某项功能。(类似于C语言中的函数) 图1 模块示意图 1.1 模块描述 图1 所示的…