一. 从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业务的三个

相关推荐
Lx35231 分钟前
YARN资源调度优化:最大化集群利用率
大数据·hadoop
isfox18 小时前
Google GFS 深度解析:分布式文件系统的开山之作
大数据·hadoop
鼠鼠我捏,要死了捏20 小时前
Hadoop NameNode内存泄漏与GC停顿问题排查与解决方案
hadoop·问题排查·jvm优化
嘉禾望岗5031 天前
Yarn介绍与HA搭建
大数据·hadoop·yarn
IT研究室1 天前
大数据毕业设计选题推荐-基于大数据的国家药品采集药品数据可视化分析系统-Spark-Hadoop-Bigdata
大数据·hadoop·信息可视化·spark·毕业设计·数据可视化·bigdata
Lx3521 天前
Hadoop性能瓶颈分析:从JVM到磁盘IO的全链路优化
大数据·hadoop
BYSJMG1 天前
计算机毕业设计选题:基于Spark+Hadoop的健康饮食营养数据分析系统【源码+文档+调试】
大数据·vue.js·hadoop·分布式·spark·django·课程设计
励志成为糕手1 天前
Hadoop进程:深入理解分布式计算引擎的核心机制
大数据·hadoop·分布式·mapreduce·yarn
像豆芽一样优秀1 天前
Hive和Flink数据倾斜问题
大数据·数据仓库·hive·hadoop·flink
计算机毕业设计木哥1 天前
计算机毕业设计 基于Python+Django的医疗数据分析系统
开发语言·hadoop·后端·python·spark·django·课程设计