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

相关推荐
starfalling10249 小时前
【hive】一种高效增量表的实现
hive
顧棟12 小时前
【Yarn实战】Yarn 2.9.1滚动升级到3.4.1调研与实践验证
hadoop·yarn
D明明就是我14 小时前
Hive 拉链表
数据仓库·hive·hadoop
嘉禾望岗50318 小时前
hive join优化和数据倾斜处理
数据仓库·hive·hadoop
yumgpkpm18 小时前
华为鲲鹏 Aarch64 环境下多 Oracle 数据库汇聚操作指南 CMP(类 Cloudera CDP 7.3)
大数据·hive·hadoop·elasticsearch·zookeeper·big data·cloudera
忧郁火龙果19 小时前
六、Hive的基本使用
数据仓库·hive·hadoop
忧郁火龙果20 小时前
五、安装配置hive
数据仓库·hive·hadoop
chad__chang1 天前
dolphinscheduler安装过程
hive·hadoop
ajax_beijing2 天前
hadoop的三副本数据冗余策略
大数据·hadoop·分布式
yumgpkpm3 天前
CMP (类ClouderaCDP7.3(404次编译) )华为鲲鹏Aarch64(ARM)信创环境多个mysql数据库汇聚的操作指南
大数据·hive·hadoop·zookeeper·big data·cloudera