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

Hive入门

什么是hive?

- Hive是Facebook开发并贡献给Hadoop开源社区的。它是建立在 Hadoop体系架构上的一层 SQL抽象,使得数据相关人 员使用他们最为熟悉的SQL语言就可以进行海量数据的处理、 分析和统计工作

- Hive将数据存储于HDFS的数据文件映射为一张数据库表,以MapReduce作为计算引擎 (Hive on MR),并提供完整的sql查询功能

- 由于Hadoop本身在数据存储和计算方面有很好的可扩展性和高容错性,因此使用Hive构建 的数据仓库也秉承了这些特性

Hive构架

Hadoop生态

HQL

基础函数: SELECT FROM WHERE ORDER BY GROUP BY LIMIT ...

排序: SORT BY DISTRIBUTE BY CLUSTER BY

标准聚合函数: COUNT,SUM,MIN,MAX,AVG...

窗口函数: FIRST_VALUE,LAST_VALUE,ROW_NUMBER ,RANK…

CUBE函数:(维度限制) GROUPING SETS,CUBE,ROLLUP,GROUPING_ID(spark sql和hive不能兼容)

定义函数: UDF(User-Defined-Function) 用户自定义函数

UDTF(User-Defined Table-Generating Functions) 用来解决 输入一行输出多行(On-to-many maping)

UDAF(User- Defined Aggregation Funcation) 自定义聚类函数 

Hive的数据单元

●Databases:数据库。概念等同于关系型数据 库的Schema;

●Tables:和关系型数据库中的表在概念上很 类似,每个表在HDFS中都有相应的目录用来存储表的数据

●外部表:Hive中的外部表和内部表很 类似,但是其数据不是放在自己表所属的目 录中,而是存放到别处,这样的好 处是如果你要删除这个外部表,该外部表所指向的数据是不会被 删除的,它只会删除外部表对应的元数据;而如果 你要删除表,该表对应的所有数据包括元数据都会被 删除 ●Partitions:分区,在Hive中,表的每一个分区 对应表下的相应目录,所有分区的数据都是存 储在对应的目录中

●Buckets :分桶,同一个分区内的数据 还可以细分,对指定的列计算其hash,根据hash值切分数据,目的是 为了并 行

●基本操作:

show databases;

show databases like 'xx*';

use database; show tables;

show partitions db.tbl_name;

desc db.table;

desc formatted db.tbl_name;

show create table db.tbl_name;

create table db.new_table like old_table

HQL优化

● 使用分区剪裁、列剪裁 在SELECT中,只拿需要的列,如果有,尽量使用分区 过滤,少用SELECT * 在分区剪裁中,当使用外关 联时,如果将副表的过滤条件写在Where后面,那么就会先全表关 联,之后再过滤 正确的写法是写在 ON后面,或者直接写成子 查询 通过执行计划可以看到具体在哪里 过滤,不确定就分析执行计划,看看执行是怎么样被优化的

● 少用多重COUNT DISTINCT

selecta,sum(b),count(distinct c),count(distinct d) from test group by a;

优化后:

select a,sum(b)as b,count(c) as c,count(d) as d from ( select a,0 as b,c,null as d from test group by a,c union all select a,0 as b,null as c,d from test group by a,d union all select a,b,null as c,null as d from test )tmp group by a;

● 是否存在多对多的关联 ● 尽量原子化操作,尽量避免一个 SQL包含复杂逻辑 ● 使用动态分区 set hive.exec.dynamic.partition=true; set hive.exec.dynamic.partition.mode=nonstrict

http://www.lryc.cn/news/324098.html

相关文章:

  • 【神经网络】得分函数,损失函数~
  • FFmepg--AVFilter过滤器使用以及yuv视频裁剪
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • string类的详细模拟实现
  • 【EasyX】 使用说明
  • 以太坊基金会JUSTIN DRAKE确认出席Hack.Summit() 2024区块链开发者大会
  • 数学建模常用代码
  • 学点儿Java_Day7_在实体类当中IDEA无法进行单元测试(@Test没有启动按钮)
  • C语言:二叉树基础
  • LeetCode热题Hot100-两数之和
  • 鸿蒙实战开发-如何通过拖动滑块调节应用内字体大小
  • matlab实现神经网络检测手写数字
  • 增强现实与虚拟现实中的大模型应用:沉浸式体验的创新
  • 【数据分析案列】--- 北京某平台二手房可视化数据分析
  • 【Golang星辰图】创造美丽图表,洞察数据:解析Go语言中的数据可视化和数据分析库
  • 阿里云原生:如何熟悉一个系统
  • Scala第十一章节(正则表达式和异常处理)
  • Flutter运行MacOs网络请求报错Unhandled Exception: DioException [connection error]:...
  • 基于SpringBoot+MyBatis框架的智慧生活商城系统的设计与实现(源码+LW+部署+讲解)
  • Godot 学习笔记(5):彻底的项目工程化,解决GodotProjectDir is null
  • Openharmony
  • 24计算机考研调剂 | 华南师范大学
  • 【Node.js】全局变量和全局 API
  • Install Docker
  • Orbit 使用指南 10|在机器人上安装传感器 | Isaac Sim | Omniverse
  • GPT系列模型的特点
  • Oracle Data Guard常用命令
  • IM系统设计之websocket消息转发
  • 关于vue 的生命周期的教程
  • STM32 CAN的工作模式